保持DAO和域对象分离

我有一个用户域对象类和一个UserDAO类。 用户只关心它的状态,而UserDAO只关心数据存储。 从我读过的内容来看,他们不应该彼此都知道也不在乎。

然后我想知道如何使用User类来处理UserDAO,反之亦然。 经过一些研究后,我发现了Service类,他们应该将一堆相关的类耦合在一起,以便在我的情况下交互User和UserDAO)。

如果DAO不应该知道也不关心域对象,为什么我会看到一些DAO接受它们相应的域对象作为参数,甚至返回它?

class UserDAO
{
    //other logic

    public function fetchById($id)
    {
        //user fetch logic

        return new User(...);
    }

    public function persist(User $user)
    {
        //user persist logic
    }

    //other logic
}

处理这个问题的正确方法是什么? 与上面的UserDAO清楚地知道用户。


这里有点混乱......

在DDD环境中,Reposity模式比DAO对象更适合。 您可以在这里查看Repository和DAO之间的区别。

存储库确实有关于您的域对象的知识,但您的域对象不知道存储库。 原因是关注点分离和分层。

存储库通常注入一些应用程序级别的类。 应用程序级别类的示例是处理用户请求(如控制器(mvc上下文)或Web服务)的类。

存储库也可以注入域服务中,但域服务通常用于解决重要业务操作的问题或者不属于域上下文中唯一实体的操作。

链接地址: http://www.djcxy.com/p/56245.html

上一篇: Keeping DAO and domain object separate

下一篇: How to create domain model with java resultset using the data mapper pattern?