2014-01-20 2 views
2

Я снова читаю книгу Марка Симана «Инъекция зависимостей в .NET». В нем он описывает тип адаптера, который используется для представления представления с соответствующей моделью просмотра, но в том же контексте также упоминается, что представление модели представления о представлении (хотя и что-то вроде IWindow) «управляет своей средой оконного типа, например, показывая модальные диалоговых окон ".Имеются ли ссылки на круговые зависимости View/ViewModel?

Было моим опытом, что это нетривиальное нарушение конструкции MVVM и может быть даже плохим решением DI. Большинство подобных «потребностей» часто могут выражаться через комбинацию DataTriggers, сторонних сервисов, шаблонов медиатора, а в некоторых случаях - простые старые события clr. (Стоит отметить, что многие люди предпочитают подвергать eventlike ViewModel элементы через IObserver инъекции Mark Seeman even blogged on this!

Поэтому я задаю вопрос:.. «Вне зависимости от структуры, технологии, языка, стек, или набор инструментов Если MVVM может быть реализован, есть (должно ли когда-нибудь) какая-либо причина, что View Model необходим осознание зрения «

Followup связан вопрос: „? есть ли когда-либо основания для игнорирования этого указания из-за сложности соблюдения шаблона строго“

?
+0

честно говоря, я не думаю, что любой может ответить на этот вопрос на 100%, потому что существует столько мнений, сколько программистов. В частности, я не думаю, что это круговая зависимость, потому что модель просмотра только «осознает» вид через интерфейс, но ничего не знает о реализации. Другое дело - многие люди сходят с ума по поводу этих ДН в эти дни, но я думаю, что это слишком привычно, и похоже, что Грег Янг думает так же http://www.infoq.com/presentations/8-lines-code-refactoring –

+0

Хорошо, это здорово, но этот вопрос очень мало связан с инъекцией зависимости.Кроме того, вопрос заключается в том, чтобы приглашать контрапункты, которые являются именно тем, что может быть ответом на этот вопрос. – Firoso

+0

Как мы знаем, ViewModel - это мост между View и Model. Ваша модель, скорее всего, специфична для домена, а пользовательский интерфейс всегда зависит от технологии. ViewModel шаги здесь и заполнить пробел. поэтому я вижу, что viewmodel и зависимость от просмотра - это более основанная на технологии проблема и основанная на том, какую технологию вы используете, будь то WPF или JS framework, такие как AngularJS. Симен упоминал MVVM как пример того, как мы нарушаем цикл зависимости. Он дает инъекцию свойств в качестве решения. Он позволяет сначала составить граф объекта, а затем ввести значение свойства. –

ответ

3

Независимо от структуры, технологии, языка, стека или набора инструментов. Если MVVM может быть реализован, есть (должен ли когда-либо быть) ЛЮБАЯ причина , что View Model нуждается в осознании представления?

ViewModel - это модель для представления, а не наоборот, поэтому не должно быть никакого осознания (прямо или через интерфейс) представления в ViewModel. Единственный раз, когда я видел, что ViewModel должен быть осведомлен о представлении, был из-за плохого дизайна.

Есть ли оправдание для игнорирования этого руководства из-за сложность принудительного применения шаблона?

Я не думаю, что есть.

Многие модели ViewModels выглядят так, как будто разработчики сделали все сначала в кодировке, а затем переместили всю эту логику кода в отдельный класс и назвали ее ViewModel. Вы увидите что-то там, как вскрытие всплывающих окон или решение о том, насколько широким должен быть определенный контроль.

Я думаю, что это не способ получить максимальную отдачу от MVVM. Логика пользовательского интерфейса всегда будет связана с представлением. Если вы используете WPF или Silverlight, будет очень сложно избавиться от всего кода в коде.

E.g. показ модального диалогового окна не является обязанностью ViewModel, пользовательский интерфейс определяет, как представлять определенное условие/событие. Условие/событие можно найти в ViewModel, но изменения в этом будут обрабатываться в представлении.

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