我的域名实体像树一样排列:
根
- 孩子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,而在内部它与域对象一起使用
我想对这两点有所了解。这实际上是存储库实现的方法。
感谢所有帮助
答案 0 :(得分:3)
课程不应该承担比他们需要更多的责任,这听起来像RootRepository
的方法是错误的方式去这里。它吸收了太多的复杂性,并且负责太多的实体。在您提出的两个选项中,第一个是更好的选择:拥有更多的存储库,每个存储库都负责您自己的域角。
然而,那就是说,我不清楚你为什么会有RootManager
。我宁愿有一系列DomainObjectRepositories
,每个都在内部管理自己的业务逻辑,只暴露相关的公共操作,然后将实际的数据库操作推迟到数据访问对象DomainObjectDao
。拥有一个无所不知的全商业逻辑类是一种可怕的代码味道,并且在这种特殊情况下具有企业上的过度杀伤力。
答案 1 :(得分:0)
我们使用选项1,它非常适合我们。假设子1是userRepository,子2是角色存储库,其外观是安全性外观。用户存储库将返回作为聚合根的用户域对象,并且用户对象包含角色。我们只会真正使用GetAllRoles的角色存储库。
我们的域对象有一个GetDTO方法,它返回由外观传输的dtos。
我希望这会有所帮助。