Кто несет ответственность
Кто несет ответственность за запуск и завершение Единицы работы в архитектуре MVC?
Кто несет ответственность
Кто несет ответственность за запуск и завершение Единицы работы в архитектуре MVC?
Контроллер не несет ответственности за это, это нарушает SRP. Контроллер вообще не должен знать о UoW. В сети обычно используется один UoW на запрос к серверу. В этом случае UoW должен быть удален в конце запроса и запущен где-то после начала запроса (в идеале запуск UoW должен быть ленивым). Лучшее место для этого - Global.asax (или ваш класс HttpApplication) с использованием обработчиков Application_EndRequest и Application_BeginRequest.
Этого легко добиться с помощью инфраструктуры IOC (мой любимый - Windsor), см. этот вопрос для получения подробной информации о реализации.
Контроллер. Это получает контекст, поэтому вы можете начать и закончить единицу работы. Например, для сеанса nHibernate для каждого запроса вам потребуется знать, когда запрос был запущен и завершен, поэтому вам нужен контекст, чтобы передать вам запрос.
Я верю в слабосвязанную архитектуру. Мой контроллер НИЧЕГО не знает о репозитории, контексте или единице работы. Я создал уровень обслуживания (не уверен, что это правильный термин), который вызывает контроллер. Затем эта служба работает с репозиторием (dll) для сохранения всех данных.
Как сказал zihotki, вы нарушите SRP, если передадите эту ответственность контроллеру. Это шаблон, ориентированный на манипулирование данными, и поэтому контроллер не должен беспокоить ... это может привести к двум нарушениям: одно для SRP и другое для принципа SoC.
Что касается того, кто несет ответственность, это должно быть определено вашей архитектурой. Предложение StartRequest / EndRequest кажется достаточно убедительным.