Как реализовать Единицу работы в MVC: Ответственность - PullRequest
7 голосов
/ 10 февраля 2010

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


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

Ответы [ 4 ]

10 голосов
/ 10 февраля 2010

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

5 голосов
/ 10 февраля 2010

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

3 голосов
/ 01 апреля 2011

Я верю в слабосвязанную архитектуру. Мой контроллер НИЧЕГО не знает о хранилище, контексте или модульной работе. Я создал сервисный слой (не уверен, что это правильный термин), который вызывает контроллер. Затем эта служба работает с хранилищем (dll) для сохранения всех данных.

2 голосов
/ 10 февраля 2010

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

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

...