哪些是存储库模式?

时间:2010-02-07 14:23:30

标签: c# repository design-patterns

我的域名实体像树一样排列:


- 孩子1 - 儿童1.1
- 儿童1.2
- 孩子2
- 儿童2.1
- 儿童2.2

我们最终得到了关于如何围绕这些域对象设计存储库的2个(相当强烈的)意见:

意见1:
我需要2个存储库Child1Repository& Child2Repository由RootFacade / RootManager类管理,以调用存储库上的相应方法。 2个子存储库仅处理DAL操作,而RootFacade是BLL。 RootFacade将DTO暴露给应用程序,而内部所有3个存储库都使用域对象

意见2:
我需要1个存储库RootRepository来处理所有事情(BLL + DAL)。存储库公开DTO,而在内部它与域对象一起使用

我想对这两点有所了解。这实际上是存储库实现的方法。

感谢所有帮助

2 个答案:

答案 0 :(得分:3)

课程不应该承担比他们需要更多的责任,这听起来像RootRepository的方法是错误的方式去这里。它吸收了太多的复杂性,并且负责太多的实体。在您提出的两个选项中,第一个是更好的选择:拥有更多的存储库,每个存储库都负责您自己的域角。

然而,那就是说,我不清楚你为什么会有RootManager。我宁愿有一系列DomainObjectRepositories,每个都在内部管理自己的业务逻辑,只暴露相关的公共操作,然后将实际的数据库操作推迟到数据访问对象DomainObjectDao。拥有一个无所不知的全商业逻辑类是一种可怕的代码味道,并且在这种特殊情况下具有企业上的过度杀伤力。

答案 1 :(得分:0)

我们使用选项1,它非常适合我们。假设子1是userRepository,子2是角色存储库,其外观是安全性外观。用户存储库将返回作为聚合根的用户域对象,并且用户对象包含角色。我们只会真正使用GetAllRoles的角色存储库。

我们的域对象有一个GetDTO方法,它返回由外观传输的dtos。

我希望这会有所帮助。

相关问题