我有一个聚合根顺序和它的子聚合OrderLine,我试图实现存储库模式,而不使用ORM框架,只使用ADO.Net,并且说实话,我的大脑堆栈有点溢出。
我学到的一种方法是使用百忧解,它的思想是记录聚合根中的事件,而不是使用它们将更改保存到数据库中。现在,我试图避免在事件中使用Projac,并希望实现存储库,它将检测AggregateRoot中的更改并将其保存到数据库中。在不使用ORM的情况下,有什么最佳做法可以做到吗?我真的找不到任何东西,我看到的所有例子都是使用EF、Nhibernate或其他or。
谢谢。
顺序聚合根:
// Skipped most of properties
public class Order
{
public int OrderID { get; private set; }
public bool IsFinalized { get; private set; }
public List<OrderLine> OrderLines { get; private set; }
public void FinalizeOrder()
{
IsFinalized = true;
}
public void AddOrderLine(int stockItemID)
{
var orderLine = new OrderLine(0, OrderID, stockItemID);
OrderLines.Add(orderLine);
}
}OrderLine聚合:
// Skipped most of properties
public class OrderLine
{
public OrderLine(int orderLineID, int orderID, int stockItemID)
{
OrderLineID = orderLineID;
OrderID = orderID;
StockItemID = stockItemID;
}
public int OrderLineID { get; private set; }
public int OrderID { get; private set; }
public int StockItemID { get; private set; }
}OrderCommanHandler和命令:
public class OrderCommandsHandler :
ICommandHandler<FinalizeOrderCommand>,
ICommandHandler<AddOrderLineCommand>
{
private readonly IOrderRepository orderRepository;
public OrderCommandsHandler(IOrderRepository orderRepository)
{
this.orderRepository = orderRepository;
}
public void Handle(AddOrderLineCommand command)
{
var order = orderRepository.FindByID(command.OrderID);
order.AddOrderLine(command.StockItemID);
orderRepository.Save(order);
}
public void Handle(FinalizeOrderCommand command)
{
var order = orderRepository.FindByID(command.OrderID);
order.FinalizeOrder();
orderRepository.Save(order);
}
}
public class AddOrderLineCommand : ICommand
{
public AddOrderLineCommand(int orderID, int stockItemID)
{
OrderID = orderID;
StockItemID = stockItemID;
}
public int OrderID { get; private set; }
public int StockItemID { get; private set; }
}
public class FinalizeOrderCommand : ICommand
{
public FinalizeOrderCommand(int orderID)
{
OrderID = orderID;
}
public int OrderID { get; private set; }
}和OrderRepository:
public class OrderRepository : IOrderRepository
{
public Order FindByID(int id)
{
// This is simple
throw new NotImplementedException();
}
public void Save(Order order)
{
// Help me implement
throw new NotImplementedException();
}
}发布于 2016-08-10 19:14:13
在不使用ORM的情况下,有什么最佳做法可以做到吗?我真的找不到任何东西,我看到的所有例子都是使用EF、Nhibernate或其他or。
这实际上与CQRS、Aggregates或领域驱动设计无关。它只是“如何将对象保存到数据库”。我建议您研究一下微型or,如PetaPoco或Dapper。这为您提供了一个非常轻量级的抽象,并提供了大量如何将对象保存到数据库中的示例。他们是一个介于与ADO.net和成熟的ORM (如nHibernate或EntityFramework )之间的中途之家。
https://stackoverflow.com/questions/38870971
复制相似问题