目前我有一个类TransactionData,它只比POJO多一点.我从HTTPServletRequest构建对象.我所做的:
public class TransactionData
{
// ...
public TransactionData(HttpServletRequest request) throws IOException
{
// do actual work here
}
}
这里有很多WTF,最令人不安的是对象TransactionData与HTTPServletRequest紧密耦合.我的想法:使用extract()方法创建一个TransactionDataExtractor接口,以便我可以实现不同的类来构建对象.
public interface TransactionDataExtractor
{
public TransactionData extract();
}
但是,如何将构建TransactionData所需的东西传递给每个实现?想到的第一件事就是使用不同的构造函数,如下所示:
public class TransactionDataExtractorRequest implements TransactionDataExtractor
{
private HttpServletRequest httpRequest;
public TransactionDataExtractorRequest(HttpServletRequest httpRequest)
{
this.httpRequest = httpRequest;
}
public TransactionData extract()
{
// do whatever is required
}
}
但在这种情况下,每当我需要构建一个新的TransactionData对象时,我必须创建一个新的TransactionDataExtractorRequest.我完全不喜欢隐含的依赖.
我能想到的另一个选择是将一个Object参数传递给extract()并在需要时抛出它,放弃类型安全并引入大量的锅炉板丑陋的代码
public TransactionData extract(Object o)
{
HttpServletRequest h;
if (o instanceof HttpServletRequest)
{
h = (HttpServletRequest)o;
}
//...
}
我不知道自己是否已经说清楚了.我觉得我错过了一些东西,我知道解决方案非常简单,但我无法掌握它.
有什么想法吗?
TIA.
编辑:问题甚至可能是我的预感完全错误,我可以毫不后悔地解雇它