2012-09-18 71 views
2

我有一个遗留应用程序,它与在每个构造函数中创建时进行一些验证的不可变对象一起工作。每个对象都有他自己的验证,f。恩。长度检查,范围检查等避免if语句创建对象

业务对象的样子:

public class MyObject { 
    private FieldA fieldA; 
    private FieldB fieldB; 
    ... 
} 

的对象是通过调用加载数据COBOL服务器创建...这个代码看起来非常脏:

if (isFieldSet(response.getValueA())) { 
    myObject.setFieldA(new FieldA(response.getValueA())); 
} 

if (isFieldSet(response.getValueB())) { 
    myObject.setFieldA(new FieldA(response.getValueB())); 
} 

... 

而且由于有很多的对象,也有很多if语句。 我可以改进它使用反射和动态创建类。

myObject.setFieldA(createField(A.class, response.getValueA())); 
myObject.setFieldA(createField(B.class, response.getValueB())); 

这使得我的代码更好,但也慢得多。有人看到任何优雅的方法来解决这个问题吗?

问候,

迈克

+4

究竟是什么问题?工作的丑陋代码仍然是可用的代码。做这个改变的收益是多少? –

+1

看起来像[工厂方法]的候选人(https://en.wikipedia.org/wiki/Factory_method_pattern)。 –

+0

是的,你说得对,代码工作,并将在未来几年正常工作。但是,是的......我认为代码不仅适用。 – boskop

回答

0

如果我得到它是正确的,你想摆脱这么多的如果语句。如果你使用一些模板引擎来接受响应并返回相应的输出,这不是很好吗?美是你可以在模板中只有一个If语句,它根据输入响应来驱动对象创建逻辑。 尝试Velocity Template Engine