Единица работы и возвращение вновь созданных идентификаторов объектов или пользовательских объектов Response
Unit of Work - это отличный шаблон, и я включил его в наши операции CUD с репозиторием...
Единственным недостатком, который я вижу, является невозможность возврата к вызывающему коду идентификатора (ов) (или, возможно, ответного DTO) нескольких объектов, связанных с единицей работы, когда речь идет о методах Create().,
Например, допустим, у меня есть клиент и объект заказа. Я создаю новые переходные объекты в своем коде вызова, добавляю их с помощью метода.Create() для единицы работы, а затем фиксирую единицу работы.
Хотя мои объекты должным образом сохраняются в базе данных, я не вызываю Repository.Create() каждого объекта из моего потребляющего кода, это единица работы, поэтому у меня нет возможности отправить какую-либо информацию обратно в потребляющий код поскольку это относится к каждому конкретному объекту.
Есть идеи? Может (или лучше вопрос, СЛЕДУЕТ), чтобы единица работы была расширена для возврата некоторого типа, может быть, пользовательского объекта, который может иметь типы объектов с их новыми идентификаторами в Словаре или что-то в этом роде?
Я просто не знаю, является ли это подходящей задачей для единицы работы. В примерах в книгах и блогах я еще не видел, чтобы эта проблема решалась.
Какие-нибудь мысли?
1 ответ
Единица работы сама по себе не препятствует возвращению идентификаторов или объектов.
Проблема может заключаться в том, что вы используете использование работы со слишком высокой степенью детализации, т. Е. Создаете несколько объектов, идентификаторы которых вы, возможно, захотите захватить в одном "блоке" (хотя в вашем примере, возвращающем объект заказа, который имеет кастомерид решит проблему). Я бы посоветовал держать ваши юниты небольшими, обычно имея дело только с 1 совокупным корнем.
Говоря об этом, это реальная проблема с шаблонами, используемыми с разделением ответственности по запросам команд (CQRS), таким как Event Sourcing.
В этом случае существует два подхода к разрешению идентификаторов объектов: 1. Создайте обратный вызов "объект создан". 2. Назначьте идентификаторы вашего временного объекта и используйте Identity Mapper для получения созданного идентификатора.
Надеюсь это поможет
Стивен