我的问题是
聚合根实体是否可以调用存储库?
我知道不应该但是想要得到确认,因为Eric的书也没有说清楚:(
还有一件事我可以在哪里获得域驱动设计的单元测试示例?
答案 0 :(得分:3)
这是一个宗教问题。 有些人认为没有问题,而其他人则认为这样做是异端邪说。
虽然我通常总是让我的存储库远离我的域模型(并且有一个上游服务对象处理存储库),但我有一个项目“需要”可以从域模型访问存储库。 这是由于Domain对象需要根据业务逻辑检索特定数据=>使用规范对象/ Linq到nHibernate(如何过滤属于该域对象的数据的责任和知识)和/或性能原因。
关于这样做的一个警告是如何获取对域对象的存储库的引用 - 在这种情况下,我使用了带有IOC工具的构造函数注入。
您是否应该这样做真的取决于您使用的解决方案/用例/技术等...
答案 1 :(得分:2)
可以吗?是的。
应该? -No。
然而,所有答案都是上下文相关的,而且您不提供自己的答案。
通用建议是寻找“服务”或“规范”类型。
答案 2 :(得分:1)
行为IS-WHAT-IT-IS。 Eric从名为“QueryService”的经纪账户实体中调用了一个类似于实用程序的存储库。他提到这不是一个真正的项目的好设计。那你做什么?
public class Clerk
{
public Clerk()
{
}
//Store Report in Database
public void File(Report);
{
ReportRepository.Add(Report);
}
}
你可以这样做,但最好告诉秘书使用哪个存储库。
public class Clerk
{
private IReportRepository _reportRepository;
public Clerk(IReportRepository ReportRepository)
{
this._reportRepository = ReportRepository
}
//Store Report in Database
public void File(Report);
{
this._reportRepository.Add(Report);
}
}