Единица работы и возвращение вновь созданных идентификаторов объектов или пользовательских объектов Response - PullRequest
4 голосов
/ 06 апреля 2011

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

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

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

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

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

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

Есть мысли?

1 Ответ

0 голосов
/ 08 апреля 2013

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

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

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

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

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

Стивен

...