我正在实现核心 J2EE 模式中指定的 DAO 模式。在我的项目中,我有 3 个模块:core layer
,它使用DAO-API layer
,由我的Service Provider DAO-MySQL layer
实现。
我对s的设计和使用有疑问TransferObject
:
1a)TransferObject
与它们的等效“业务层”类相比,s 非常冗余是否正常,或者“业务层”类是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的“Example 9.5 Customer Transfer Object”中,似乎只有一个Customer
类,即TransferObject
.
我还看到了拥有两个类的好处,它可以让我DAO-API layer
完全独立于core layer
,并作为一个单独的模块提供,最终用户甚至都不知道。
=> 1b)但也许 myDAO-API layer
应该是 my 的一部分,core layer
并且Customer
是TransferObject
?
=> 1c)或者为了避免核心业务层类与其传输对象之间的冗余,我想念什么?
2)调用DAOs方法时不使用s作为参数是否合法?TransferObject
例如:
public interface CustomerDAO {
public Collection<CustomerTO> getCustomersByNameAndCity(String name, String city);
}
或者我应该总是使用类似的东西:
public interface CustomerDAO {
public Collection<CustomerTO> getCustomersByNameAndCity(CustomerTO to);
}
使用第一种方法有什么缺点?