Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用DAO作为命令_Java_Design Patterns - Fatal编程技术网

Java 使用DAO作为命令

Java 使用DAO作为命令,java,design-patterns,Java,Design Patterns,我需要一个建议,我们正在考虑的设计方法之一 我们正在实现一个JavaWeb服务提供者,它处理关系数据库中的数据。我们建议的课程包括: IDAO-与execute()方法的接口 GetCustomerDAO和UpdateCustomerDAO实现IDAO DAOFactory—要读取的DAO列表配置文件,该文件具有要为特定服务调用的DAO的映射 ServiceImpl-包含getCustomer、updateCustomer方法。该服务使用DAOFactory获取DAO对象的列表,然后遍历该列表并

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

我们正在实现一个JavaWeb服务提供者,它处理关系数据库中的数据。我们建议的课程包括:

  • IDAO-与execute()方法的接口
  • GetCustomerDAO和UpdateCustomerDAO实现IDAO
  • DAOFactory—要读取的DAO列表配置文件,该文件具有要为特定服务调用的DAO的映射
  • ServiceImpl-包含getCustomer、updateCustomer方法。该服务使用DAOFactory获取DAO对象的列表,然后遍历该列表并调用DAO.execute方法 我认为这更像是我们将DAO转换成了命令。然而,出于某些原因,我不太喜欢这种方法: -在ServiceImpl中:您不能影响被调用的DAO的流。例如,在执行第一个DAO之后,如果我不想执行第二个DAO,而是执行第三个DAO,那么很难实现这一点。 -此外,我们不确定是否可以在概念上使用DAO。因为命令对象可以有业务逻辑,但是DAO应该只处理读写数据到db的方面


    请让我知道你的看法,设计是否合适。谢谢

    我不认为在这种情况下使用命令设计模式有什么好处
    1.DAO的思想是提供一个抽象持久性机制的接口。该接口传统上定义CRUD方法。每个DAO具体类通常都会为特定的持久性机制实现DAO接口。这两种实现都可以互换,因为它们实现相同的接口。
    2.服务功能可以分为单独的服务层。通常,该层依赖于DAO层(用于持久性)。服务接口可以类似于向潜在客户公开应用程序中实现的业务逻辑(通常是业务层中的逻辑)的外观。示例:
    用户DAO界面:

    public interface UserDao { void save(User user); void delete(User user); void update(User user); User findByUsername(String username); List findAll(); ... } 公共接口UserDao{ 作废保存(用户); 作废删除(用户); 无效更新(用户); 用户findByUsername(字符串用户名); 列出findAll(); ... } 用户服务界面:

    public interface UserService { void createUser(String username, String password); boolean loginUser(String username, String password); boolean isUsernameUnique(String username); .... } public class UserServiceImpl implements UserService { private UserDao userDao; public UserServiceImpl(UserDao userDao){ this.userDao = userDao; } ... } 公共接口用户服务{ void createUser(字符串用户名、字符串密码); 布尔登录用户(字符串用户名、字符串密码); 布尔值isUsernameUnique(字符串用户名); .... } 服务实施:

    public interface UserService { void createUser(String username, String password); boolean loginUser(String username, String password); boolean isUsernameUnique(String username); .... } public class UserServiceImpl implements UserService { private UserDao userDao; public UserServiceImpl(UserDao userDao){ this.userDao = userDao; } ... } 公共类UserServiceImpl实现UserService{ 私有UserDao UserDao; 公共userserviceinpl(UserDao UserDao){ this.userDao=userDao; } ... }
    谢谢你,沃尔特斯。因此,您的建议基本上是在ServiceImpl中直接调用DAO方法。我确实喜欢这种方法。是的。服务层将持久性委托给DAO(使用依赖项注入)。@Walters您能给出一个UserServiceImpl中的一个方法使用的业务层类的示例吗?:)