我有與其子的聚合根高階聚集訂單行,我想實現存儲庫模式,而無需使用ORM框架,只ADO.Net來,說我的大腦堆棧有點溢出的真相。我瞭解到應堅持秩序AggregateRoot不使用ORM
一種方法是使用Projac,其想法是記錄聚合根裏事件,比使用它們將更改保存到數據庫中。我現在想避免使用Projac與事件和要實現寶庫,它會檢測內部AggregateRoot變化,並將其保存到數據庫中。沒有使用ORM的最佳做法嗎?我真的找不到任何東西,我見過的所有例子都使用EF或Nhibernate或其他ORM。
謝謝。
訂購聚合根:
// 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);
}
}
訂單行總結:
// 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();
}
}
沒有「孩子聚集」這樣的事情。 – theDmi
正確,並刪除單詞的孩子。 – QuietNaN