如何使用域模型处理持久性?

时间:2014-12-02 21:16:07

标签: oop domain-driven-design persistence

由于域模型应该是普通对象,如何处理持久性? 我的理解是,必须在应用层中进行所有持久性,但是您的域模型如何通知您的应用层需要进行的任何CRUD操作然后将它们传递到存储库?

任何建议?

3 个答案:

答案 0 :(得分:1)

域名没有通知应用层CRUD操作。它不知道域对象应该如何或何时被持久化。它是应用程序层,它决定何时结束给定的应用程序事务并刷新对持久存储的更改。

答案 1 :(得分:0)

应用程序的责任是协调域中的操作。 对象包含逻辑和业务规则,但它不知道应用程序的所有流量。完成应用程序所需的步骤数保留在应用程序层中。 存储库处理持久性,但是是调用它的应用程序。

示例:

Customer customer = customerRepository.GetById(2);
customer.Rename("Jhon Doe");
customerRepository.Save(customer);

答案 2 :(得分:-1)

Domain Services是您正在寻找的概念。

域服务被注入实体/域对象。域对象通过接口调用服务。

编辑:这个例子是C#,因为它是我的母语。如果您的语言支持" interfaces",则可以在此处应用这些概念。

public class Program
{
    public static void Main()
    {
        Order myOrder = new Order(new OrderRepository());

        myOrder.Save();
    }
}

public interface IOrderRepository
{
    void Save(Order order);
}

public class OrderRepository : IOrderRepository
{
    public void Save(Order order)
    {
          // Persistence stuff here
    }
}

public class Order
{
    private IOrderRepository _orderRepository;
    public Order(IOrderRepository orderRepository)
    {
        _orderRepository = orderRepository;
    }

    public void Save()
    {
        _orderRepository.Save(this);
    }
}