我正在執行Core J2EE Patterns中指定的DAO模式。在我的項目中,我有3個模塊:core layer
,它使用DAO-API layer
,這由我的Service ProviderDAO-MySQL layer
執行。在Java中實現DAO模式時,應該如何實現和使用TransferObjects?
我對設計和使用的TransferObject
的提問:
1A)是正常的,有TransferObject
,希望能非常多餘的,因爲相比,他們相當於「業務層」類或「業務層」類是的TransferObject
s?
舉例來說,如果在我的core layer
我有一個類:
public class Customer {
private int id;
private String lname;
...
//various methods here, plus getters/setters
}
在DAO-API layer
,我將有:
public class CustomerTO implements Serializable {
private int id;
private String lname;
....
//getters/setters here
}
我恨Customer
和CustomerTO
之間的冗餘。此外,在Core J2EE Patterns的「示例9.5客戶傳輸對象」中,似乎只有一個Customer
類,即是的TransferObject
。
我還看到有兩個類允許我的DAO-API layer
完全獨立於core layer
,並作爲單獨的模塊提供,最終用戶甚至不知道。
=>1B)但也許我DAO-API layer
應該是我core layer
的一部分,並且Customer
是的TransferObject
?
=>1c)或者是有什麼我錯過,以避免核心業務層類和它的傳輸對象之間的冗餘?
2)調用DAO的方法時,它是合法的,以不使用TransferObject
S作爲參數?例如:
public interface CustomerDAO {
public Collection<CustomerTO> getCustomersByNameAndCity(String name, String city);
}
或者我應該使用類似:
public interface CustomerDAO {
public Collection<CustomerTO> getCustomersByNameAndCity(CustomerTO to);
}
什麼是使用第一種方法的缺點?
「如果您的DTO不限制任何信息,那麼您可以在業務層使用同一個類,但是當您必須限制信息時,它可能會在未來的增強中導致問題。」 =>在哪些情況下我會希望DTO限制某些信息?我沒有看到任何用例。此外,最常用的解決方案是「複製」DTO,還是直接使用業務層類? – FBB