я работаю над приложением N-слоистые .NET со следующими слоями:это хорошо для прикладного уровня с многостадийным процессом, чтобы не использовать слой домена
- Presentation
- Применение
- домена
- Инфраструктура (Содержит Постоянство и общие вспомогательные функции, такие как электронная почта)
в какой-то момент в моей APPLICAT ион, запрос одобрен. После утверждения необходимо выполнить 4 этапа следующим образом:
- Присвоить код тега продукта выпущенному продукту в запросе.
- Обновить статус запроса от «Обрабатывается» в «Order Completed»
- Отправить по электронной почте запрашивающей с указанием их продукт готов к пикап
- Отправить по электронной почте менеджеру реквестера информируя их о чем их работник был дан и копия запроса они одобренным для продукта
Вышеуказанные шаги должны быть частью атомарной операции означает, что они должны все быть сделано или действие отменяется. я имею в виду иметь прикладной уровень направляет запрос Repository и Persistence Layer выполнять следующие задачи:
- запросов Application Layer для Repository запрос на выполнение шаги 1 и 2 в качестве единицы работы транзакции
- запросы прикладного уровня для слоя инфраструктуры выполнять шаги 3 и 4.
Я не совсем уверен, что если Application Layer должен это сделать. Я думаю, это потому, что первые 2 действия требуют обращения к репозиторию, которого я избегал делать на уровне домена. Последние 2 шага включают в себя уровень инфраструктуры, с которым может взаимодействовать уровень домена через экземпляр, введенный в зависимость. Следуя этой логике, уровень приложения не требует, чтобы слой домена ничего не делал. Является ли это, как правило, для многоэтапного процесса, подобного этому, когда у вас есть Application Layer? Или я что-то пропустил?
Я знаю структуру, называемую Windows Workflow, но я не уверен, что это поможет в этом случае, поскольку этот многоступенчатый процесс не включает взаимодействие человека на этапах обработки, где вещи могут ждать несколько дней , Я также не хочу, чтобы приложение было слишком сложным, если мне это не нужно.
Заранее спасибо.
Возможно, вы ищете Saga в этом случае, поскольку у вас, похоже, есть 2 разных агрегата в игре «Продукт» и «Запрос». – plalx
Спасибо за идентификацию проблемы. Похоже, я пропустил ситуацию. Существует таблица продуктов, которая содержит только записи для каждого уникального доступного продукта. В этом случае можно запросить только 4 возможных модели сотовых телефонов. Когда запрос завершен, он обновляется с моделью телефона, которая была выпущена вместе с кодом тега продукта. Записи продукта не обновляются. Вопрос по-прежнему стоит, если 4 этапа выполняются с помощью уровня приложения. Я повторю первый шаг. Я также изменю репозиторий продуктов для запроса репозитория. – Robertcode
Ну, тогда вы можете просто положить весь процесс в службу приложений. Службы приложений предназначены для координации бизнес-процессов. Просто загрузите 'Request' AR из репозитория, вызовите на него бизнес-операции, сохраните его и отправьте электронные письма после завершения транзакции. Если вы внедрили события домена, вы также можете отправлять электронные письма в подписчик событий. – plalx