2012-09-18 73 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