【问题标题】:Repository, Entity objects and Domain Objects存储库、实体对象和域对象
【发布时间】:2025-12-26 13:15:06
【问题描述】:

在我的存储库中,我正在通过 Linq 实体查询对我的域对象进行分配。然后我有一个服务层来处理从存储库返回的这些对象。

我的域对象应该像这样在存储库中吗?或者我的存储库是否应该仅限于实体和数据访问,而是让我的服务层对域对象进行分配?

在存储库中进行所有分配似乎更容易,但现在我的数据库和域对象之间的区别并不明显。这里的正确做法是什么? tia

【问题讨论】:

    标签: linq-to-sql domain-driven-design repository-pattern


    【解决方案1】:

    IMO 如果应用程序相对简单并且您无法想象删除数据访问权限并在存储库中进行分配。但是,如果您认为应用程序将来会变得更加复杂,或者您可能想要更改数据访问权限,请将此功能保留在存储库之外。

    我已经完成了在存储库中分配的应用程序和服务层中的其他应用程序,还有一个我有一个单独的转换层(它不是一对一的转换并且对象很复杂)。

    关于最佳实践的一件事要记住,那里有帮助,如果它使事情变得更困难,那么不要使用它。

    【讨论】:

      【解决方案2】:

      我以前不喜欢它。但现在通常不会回头。基本上问题是,如果您需要更改为结构不同的外部数据源,您可以设置一个新的映射以及存储库代码的实现并完成它。

      这是关于数据映射的。检查此链接:http://www.martinfowler.com/eaaCatalog/repository.html

      还要检查这个相关问题:IRepository confusion on objects returned。我使用了一个类似的映射器,但让它在 IQueryable 级别上运行,这使得在映射后使用域对象时能够做一些非常有趣的事情。

      【讨论】: