Почему две модели не должны общаться с каждым другим - PullRequest
1 голос
/ 04 ноября 2010

Что ж, в схеме MVVM хорошей практикой является то, что две модели не должны знать или разговаривать друг с другом.Это означает, что вы не должны создавать объект одной модели в другой, а затем регистрироваться на событие или выполнять похожие вещи.

Но почему, что не так, если две модели знают друг друга?Я пишу код и что произойдет, если обе мои модели знают друг друга.

Ответы [ 2 ]

4 голосов
/ 04 ноября 2010

Если вы собираетесь обойти MVVM любым способом, для которого у вас есть веская причина (в противном случае вы могли бы просто написать его в виде традиционного кода и сохранить некоторые данные ):)

Существует несколько преимуществ использования MVVM, которые в основном связаны с очень слабой связью, модульным тестированием и повторным использованием.

Основной принцип слабой связи выглядит примерно так:

  • Представление знает, как отображать данные определенной формы, но не знает, откуда поступают данные.
  • Модель представления обеспечивает определенную форму данных и настроек, , которую представления могут использовать , но не знает, кто его отображает.
  • Модель знает, как хранить общие данные, но не знает, кто их потребляет
  • Контроллер (отсутствует в большинстве объяснений MVVM) решает, чтоданные для выборки, какие данные отображать и где их отображать.Вот где принятие решений принадлежит.

Если вам требуется, чтобы ваши ViewModels знали друг о друге, то вам, скорее всего, не хватает объекта Controller, который управляет вашими 2 ViewModels и связанными с ними Models / Views.

Если вы можете предоставить больше информации о том, почему ваши модели в настоящее время связаны, я, возможно, смогу предложить альтернативу.

2 голосов
/ 04 ноября 2010

Часто модели представлений идеально подходят для взаимодействия друг с другом. Родительские / дочерние отношения в представлении включают модель родительского представления, в конце концов содержащую коллекцию моделей дочерних представлений. Существует множество обстоятельств, при которых, например, доступность команд в родительском представлении зависит от состояния его дочерних элементов. Иногда целесообразно делегировать это отдельному классу контроллера, но это также не стоит усилий, чтобы сделать это.

Это действительно зависит от общей сложности вашего приложения. Иногда такие усилия необходимы; иногда это просто позолота.

...