【问题标题】:What methods should be contained in the DAO? [closed]DAO 中应该包含哪些方法? [关闭]
【发布时间】:2015-01-12 12:02:44
【问题描述】:

问题在于模式理解本身,而不是具体实现。

我已经阅读了有关 DAO 模式的信息,出现的问题是DAO 中应该包含哪些方法?例如,

public interface UserDAO{

    public User getUserById(Integer id);

    public void deleteUser(Integer id);

    public void updateUser(Integer id, User user);

    public void createUser(User user);
}

我们可以说接口满足DAO-模式吗?如果没有,我应该添加/删除哪些方法?

【问题讨论】:

    标签: java dao


    【解决方案1】:

    如果我们正在讨论更通用的方法,那么您可以使用:

    public interface GenericDao<D>{
    
        public D get(Long id);// as Id use Long instead of Integer, Ids can be very large numbers, Int can be not enough
    
        public Collection<D> getList(SearchCriteria crit); //for retrieving more than one element 
    
        public void remove(Long id);
    
        public void update(D entity); // remember that updated record should have already id inside, you can add assert inside
    
        public void create(D entity); // assert that id is null
    }
    

    最后一步可以用保存方法替换更新/添加(可选)。

    你可以使用泛型,并让 D 实现一些具有 getId() 方法的接口,这将有助于为所有 DAO 编写一个类,作为父级,将减少你的代码:)

    public interface Model implement Serializable{
    
       Long getId();
    
    }
    

    在你的 DAO 内部,你会这样写:

    public interface UserDAO <D extends Model>{
    ...
    

    从这一点开始,您可以在 GenericDaoImpl 内部实现所有 crud 操作。而你所有的 dao,比如 UserDao 都将简单地扩展 GenericDaoImpl,而像 UserDao 这样的 Dao 接口将扩展 GenericDao 接口。

    因此您将在 Generic 类中隐藏通用逻辑,并仅将特定方法添加到某些 Dao,例如通过电子邮件、用户名或年龄获取用户:) 您的代码将更清晰,更具可读性。

    【讨论】:

    • 很有趣,所以这个界面可以用来访问项目中的任何类型的用户。我们是否需要添加一个类似 getList 方法的方法来检索实体集合?
    • 当您创建任何 API 时,您可能会有一个列表视图,您希望在其中列出所有用户,因此列表非常常见。对于编辑,您使用 get(id) 方法等。
    • 我一直在使用这种模式(使用泛型),而我的 DAO 类只是扩展了泛型主类,因此代码重复几乎为零。
    【解决方案2】:

    基本上 DAO 层包含与 CRUD(创建、读取、更新、删除)操作相关的函数。由于您的界面大多只包含这些功能,因此您的界面是可以接受的。如果您想要通用,那么其他答案也很好。您也可以根据需要添加更多 CRUD 功能,例如:

    getUserByEmail(String email){}
    

    您也可以添加这些类型的功能..

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 2019-03-17
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2012-06-14
      • 2021-07-06
      • 2012-11-06
      相关资源
      最近更新 更多