由于域模型应该是普通对象,如何处理持久性? 我的理解是,必须在应用层中进行所有持久性,但是您的域模型如何通知您的应用层需要进行的任何CRUD操作然后将它们传递到存储库?
任何建议?
答案 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);
}
}