什么应该是设计DAO类的最佳方法?
方法#1:将 DAO类设计为对象.
class Customer {
//customer class
}
class CustomerDAO {
public void saveCustomer(Customer customer) {
//code
}
public Customer getCustomer(int id) {
//code
}
}
//Client code
class client {
public static void main(String[] args) {
CustomerDAO customerDAO = new CustomerDAO();
Customer customer = new Customer();
customerDAO.saveCustomer(customer);
}
}
Run Code Online (Sandbox Code Playgroud)
方法#2: 使用静态方法设计DAO类(又名静态类)
class Customer {
//customer class
}
class CustomerDAO {
public static void saveCustomer(Customer customer) {
//code
}
public static Customer getCustomer(int id) {
//code
}
}
//Client code
class client {
public static void main(String[] args) {
Customer customer = new Customer();
CustomerDAO.saveCustomer(customer);
}
}
Run Code Online (Sandbox Code Playgroud)
方法#1中,我必须在所有客户端代码中创建DAO类的对象(其他选项是传递DAO的引用).在方法#2中,我不必创建对象,静态方法可以设计为没有状态跟踪.
那么哪种方法最适合DAO类的设计呢?
Eri*_*son 37
我建议方法#1,但是会使用Spring进行依赖注入而不是直接实例化DAO.
这样,对于单元测试客户端代码,您可以替换模拟DAO,并验证是否使用适当的参数调用了正确的DAO.(Mockito在这里很有用.)
如果使用静态方法,则单元测试要困难得多,因为静态方法无法被覆盖.
Abd*_*UMI 11
要有更多的抽象:
interface IDAO<T> {
public save(T t);
public T getById(int id);
//...etc
}
Run Code Online (Sandbox Code Playgroud)
然后
public CustomerDao implements IDAO<Customer>{
public save(Customer c){
//Code here
}
public Customer getById(int id){
//Code here
}
}
Run Code Online (Sandbox Code Playgroud)
和DAO到另一个域
public UniversityDao implements IDAO<University>{
public save(University u){
//Code here
}
public University getById(int id){
//Code here
}
}
Run Code Online (Sandbox Code Playgroud)
现在表示层或主类将包含如下代码:
IDAO dao;
dao=new CustomerDao();
//...
dao=new UniversityDao();
Run Code Online (Sandbox Code Playgroud)
我也会选择选项1,但我也建议你编程接口.创建一个界面,设置DAO必须提供的功能,然后根据需要实现具有不同类的功能.
public interface CustomerDao {
public void saveCustomer(Customer customer);
public Customer getCustomer(int id);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以拥有class SimpleCustomerDao implements CustomerDAO {/*code here*/}.
在你main(以及你需要的任何其他地方)你将拥有:
//Note that you have an interface variable and a real class object
CustomerDao customerDao = new SimpleCustomerDao();
Run Code Online (Sandbox Code Playgroud)
你可以弄清楚这样做的好处!
是的,如果您使用Spring或Guice,那么请使用依赖注入!
| 归档时间: |
|
| 查看次数: |
26607 次 |
| 最近记录: |