Единица работы и возврат вновь созданных идентификаторов объектов или пользовательских объектов ответа.

Единица работы — отличный паттерн, и я включил его в наши операции с репозиторием CUD...

единственная вещь, которую я вижу как недостаток, - это невозможность вернуть вызывающему коду идентификатор (ы) (или, возможно, ответный DTO (ы)) нескольких объектов, связанных с единицей работы, когда дело доходит до методов Create () .

Например, предположим, что у меня есть объект Customer и Order. Я создаю новые временные объекты в вызывающем коде, добавляю их с помощью метода .Create() для единицы работы, а затем фиксирую единицу работы.

Хотя мои объекты правильно сохраняются в базе данных, я не вызываю Repository.Create() каждого объекта из моего потребляющего кода, а единицу работы, поэтому у меня действительно нет возможности отправить какую-либо информацию обратно в потребляющий код. как это относится к каждому конкретному объекту.

Любые идеи? Можно ли (или, лучше сказать, СЛЕДУЕТ) расширить единицу работы, чтобы она возвращала какой-то тип, может быть, пользовательский объект, который может иметь типы объектов с их новыми идентификаторами в словаре или что-то в этом роде?

Я просто не знаю, является ли это подходящей задачей для подразделения работы. В примерах в книгах и блогах я еще не видел решения этой проблемы.

Есть предположения?


person Michael McCarthy    schedule 06.04.2011    source источник


Ответы (1)


Единица работы сама по себе не исключает возврата идентификаторов или объектов.

Проблема может заключаться в том, что вы используете использование работы со слишком высокой степенью детализации, т.е. создание нескольких объектов, идентификаторы которых вы, возможно, захотите зафиксировать в одной «единице» (хотя в вашем примере, возвращая объект заказа, который имеет идентификатор клиента решит проблему). Я бы посоветовал, чтобы ваши единицы были небольшими, обычно имея дело только с 1 совокупным корнем.

Говоря это, это реальная проблема с шаблонами, используемыми с разделением ответственности командных запросов (CQRS), такими как источник событий.

В этом случае есть два подхода к разрешению идентификаторов объектов: 1. Используйте обратный вызов «созданный объект» 2. дайте вашим переходным объектам идентификаторы guid и используйте Identity Mapper для получения созданного идентификатора.

Надеюсь это поможет

Стивен

person stevenrcfox    schedule 08.04.2013