可以聚合根实体调用Repository

时间:2009-10-18 05:37:23

标签: domain-driven-design

我的问题是

聚合根实体是否可以调用存储库?

我知道不应该但是想要得到确认,因为Eric的书也没有说清楚:(

还有一件事我可以在哪里获得域驱动设计的单元测试示例?

3 个答案:

答案 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);
    }
}
相关问题