我需要一个建议我们正在考虑的一种设计方法。

我们正在实现一个Java Web服务提供者,该提供者对关系数据库中的数据起作用。我们的建议课程是:


IDAO-与execute()方法的接口
GetCustomerDAO和UpdateCustomerDAO实现IDAO
DAOFactory-要读取的DAO的配置文件列表,该文件具有要为特定服务调用的DAO的映射。
ServiceImpl-包含getCustomer,updateCustomer方法。该服务使用DAOFactory获取DAO对象的列表,然后在该列表上进行迭代并调用DAO.execute方法。


我认为这更像是将DAO转换为Command。但是,由于某些原因,我不太喜欢这种方法:
-在ServiceImpl中:您不能影响被调用的DAO的流程。例如在执行第一个DAO之后,如果我不想执行第二个DAO,而是执行第三个DAO,则很难实现它。
-除了不确定我们是否可以在概念上使用DAO。因为Command对象可以具有业务逻辑,但是DAO仅应处理将数据写入db的方面。

请让我知道您的意见,该设计是否合适。谢谢

最佳答案

在这种情况下,我看不到使用Command设计模式的好处。
1. DAO的想法是提供一个抽象持久性机制的接口。传统上,此接口定义CRUD方法。对于特定的持久性机制,每个DAO具体类通常都会实现DAO接口。例如,您可以有一个将数据存储到关系数据库中的实现,另一个将数据存储到xml文件中。这两个实现都可以互换,因为它们实现了相同的接口。
2.服务功能可以分为单独的服务层。通常,此层依赖于您的DAO层(用于持久性)。服务接口可以类似于向潜在客户暴露在应用程序中实现的业务逻辑(通常是业务层中的逻辑)的外观。例:
用户DAO界面:

公共接口UserDao {
    保存(用户用户);
    无效delete(User user);
    无效更新(用户);
    用户findByUsername(String username);
    列出findAll();
    ...
}


用户服务界面:

公用接口UserService {
   void createUser(String username,String password);
   boolean loginUser(String username,String password);
   boolean isUsernameUnique(String username);
   ....
}


服务实施:

公共类UserServiceImpl实现UserService {

  私人UserDao userDao;

  公共UserServiceImpl(UserDao userDao){
    this.userDao = userDao;
  }
  ...
}

10-06 07:58