1

В приложении MVVM LOB, скажем, у меня есть ViewModel, который позволяет пользователю запустить долговременный бизнес-процесс, давайте притворимся, что это рабочий процесс создания заказа. Когда команда CreateOrder выполняется в ViewModel, как объект UnitOfWork (DbContext в EF) создается и управляется на протяжении всего его жизненного цикла? Является ли ViewModel ответственным за управление его временем жизни, передавая его в какую-либо службу диалога мастера и, в конечном итоге, передавая его в базу данных? Похоже на нарушение SRP. Но если ViewModel не управляет этим процессом, кто/что делает? Какой-то OrderManagerService?В MVVM, где выполняются длительные бизнес-операции?

Кроме того, где IoC/Dependency Injection вписывается в это изображение? Очевидно, для модульного тестирования я не хочу, чтобы ViewModel создавал новый UnitOfWork, связанный с базой данных. Но если этот бизнес-процесс запускается только в том случае, если пользователь запрашивает его, очевидно, что UnitOfWork не может быть введен в ViewModel при запуске приложения.

Благодаря

ответ

1

Я думаю, вы прибил его с обслуживанием OrderManager. Вы действительно не хотите, чтобы накопление этого изменения происходило на уровне представления. Создайте объект PendingOrder, чтобы скопировать шаблон UnitOfWork. Поместите в хранилище памяти или внешнее хранилище данных (возможно, память).

Это обеспечивает чистоту вашего слоя обзора и упрощает тестирование.

Это как-то распускает вашу проблему IOC/тестирования. Модуль тестирует ваш код PendingOrder независимо от вашего пользовательского интерфейса. Затем вы можете высмеивать/заглушить его для тестирования пользовательского интерфейса.

+0

Концептуально, как классы OrderManager и PendingOrder связаны друг с другом? Кроме того, если я удалю создание UoW из моей модели просмотра, разве я не переместил проблему издевательства над UoW от моей модели просмотра и в другую службу? Если эта другая служба должна создать экземпляр UoW, как бы я мог тестировать эту услугу? – BCA

Смежные вопросы