CRUD по объединенному корню, используя традиционный ado.net - PullRequest
1 голос
/ 20 августа 2009

Может кто-нибудь показать мне простые операторы CRUD для совокупного корня с использованием традиционного ado.net? Заранее спасибо!

1 Ответ

1 голос
/ 20 августа 2009

(это написано в предположении, что используется GUID или какой-то первичный ключ, не сгенерированный базой данных) Также много кода котла, такого как управление соединением и т. Д. ... должны быть перемещены в базовый класс для репозитория. Если Order является агрегатным корнем, возможно, следует сделать OrderLineRepo приватным для сборки

public class OrderRepository : Repository

{
    public void Save(Order order)
    {
        if(order.IsDirty)
        {
                    //sets up connection if required, command and sql
            ICommand command = BuildCommandForSave(order);  
            command.Execute();
            OrderLineRepository orderLineRepo = GetOrderLineRepo();
            foreach(OrderLine line in order.OrderLines)
            {
                orderLineRepo.Save(line);
            }
        }
    }
}

Однако я бы подчеркнул, что это действительно простая наивная реализация, и что я лично использовал бы ORM, такой как nHibernate, для своей персистентности, если бы выполнял DDD, поскольку требования для хорошего хорошо протестированного слоя персистентности нетривиальны

Также предполагается, что функция IsDirty учитывает дочерние элементы - нам также потребуется средство, чтобы увидеть, является ли порядок новым / отредактированным, а не просто грязным

...