Как реализовать Единицу работы в MVC: Ответственность

Кто несет ответственность


Кто несет ответственность запустить и закончить Единицу работы в архитектуре MVC?

7
задан SDReyes 10 February 2010 в 17:09
поделиться

3 ответа

Контроллер не отвечает за это, это нарушает SRP . Контроллер вообще не должен знать о UoW. В сети обычно используется один UoW на запрос к серверу. В этом случае UoW должен быть удален в конце запроса и запущен где-то после начала запроса (в идеале запуск UoW должен быть ленивым). Лучшее место для этого - Global.asax (или ваш класс HttpApplication) с использованием обработчиков Application_EndRequest и Application_BeginRequest.
Этого можно легко достичь с помощью инфраструктуры IOC (мой любимый - Windsor), см. этот вопрос для подробностей реализации.

10
ответ дан 6 December 2019 в 09:19
поделиться

Как сказал zihotki, вы нарушите SRP, если передадите эту ответственность контроллеру. Это паттерн, ориентированный на манипулирование данными, и как таковой не должен быть заботой контроллера... это будет два нарушения: одно для SRP и другое для принципа SoC.

Что касается того, кто несет ответственность, это то, что должно быть определено вашей архитектурой. Предложение StartRequest/EndRequest кажется достаточно надежным.

2
ответ дан 6 December 2019 в 09:19
поделиться

Контроллер. Это получает контекст, поэтому вы можете начать и закончить единицу работы. Например, для сеанса nHibernate для каждого запроса вам необходимо знать, когда запрос был запущен и завершен, поэтому вам нужен контекст, чтобы передать вам запрос.

5
ответ дан 6 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: