Несколько ViewModels изменяют один и тот же объект домена - PullRequest
0 голосов
/ 13 февраля 2011

извините за мой английский.

Ранее я публиковал этот вопрос как: Несколько ViewModels запрашивают один и тот же объект домена, должен ли я предоставить им одинаковые / разные экземпляры?

После того, как я провел некоторое исследование по этому вопросу, я понял, что мой предыдущий вопрос был слишком запутанным, поэтому я публикую этот новый вопрос.

Допустим, я хочу создать настольное приложение WPF для управления информацией в 1 млрд.человек.У него только один конечный пользователь (я), и все данные хранятся на моей локальной машине (SQL Server / MySQL).Я собираюсь использовать Visual Studio, Autofac, NHibernate и попытаться реализовать шаблоны MVVM, DI, DDD.

Один и тот же человек может одновременно отображаться в любом месте пользовательского интерфейса: в нескольких окнах, вкладках, списках, выпадающих списках., текстовые блоки ... Каждый список может содержать несколько тысяч человек, а все приложение может иметь от 10 до 100 списков.И содержимое (лица) списков часто обновляется: Каждый раз, когда я изменяю настройки списка, список очищается, а затем заполняется еще несколькими тысячами новых людей .

Проблема в том, что: если я изменяю человека (например, меняю имя) в одном списке, как применить изменения ко всем другим спискам?

Я думаю, что есть 2 способа решить эту проблемупроблема:

  1. Для каждого человека используйте один экземпляр во всем приложении.Чтобы реализовать это, я могу использовать один UnitOfWork через приложение, но, похоже, такой подход вызовет утечку памяти.

  2. Использование нескольких экземпляров для каждого человека (по одному экземпляру в списке).Чтобы реализовать это, я думаю, что я должен использовать один UnitOfWork для каждого списка, и я должен найти способ синхронизировать все экземпляры человека. Berryl упомянутый агрегатор событий.Но кто несет ответственность за публикацию и регистрацию событий?

Я нашел очень похожий вопрос в здесь , а также прочитал следующие статьи, но я все еще чувствую растерянность:

Спасибо!

1 Ответ

2 голосов
/ 14 февраля 2011

Не делитесь экземплярами сущностей между сеансами, и НИКОГДА не используйте один сеанс для настольного приложения.

Поскольку обычно ViewModels являются частью отдельных деловых бесед, у вас, вероятно, будет одинсеанс на виртуальную машину.

Каждый ViewModel должен регистрировать события, которые он принимает, и он отвечает за публикацию тех, которые он генерирует.Альтернативой является публикация на уровне сервисного / бизнес уровня.Вам нужно посмотреть, что лучше всего подходит для вашей архитектуры.

...