MVC против Наблюдателя - PullRequest
       9

MVC против Наблюдателя

3 голосов
/ 21 ноября 2008

Я недавно задал вопрос о StackoverFlow о MVC: Можно ли использовать шаблон проектирования / архитектуры MVC при разработке приложений для настольных компьютеров?

На основании предоставленного ответа я начал исследование того, как это будет реализовано в приложении Windows. Я наткнулся на следующую статью CodeProject: http://www.codeproject.com/KB/cs/model_view_controller.aspx

В комментариях под статьей некоторые пользователи утверждают, что (хотя это хорошая статья), на самом деле это образец наблюдателя. Первый, но менее важный вопрос: кто-то соглашается или не соглашается с этим и почему?

По второму и более важному вопросу: я пытаюсь создать небольшую программу со списком задач в .NET. Это будет очень крошечно и, надеюсь, быстро. В общем, какая архитектура будет лучше для такого проекта? Шаблон Наблюдателя или Шаблон MVC? Или другой шаблон?

Спасибо

Ответы [ 3 ]

4 голосов
/ 22 ноября 2008

обычно модель в mvc (http://en.wikipedia.org/wiki/Model-view-controller) является наблюдаемой / субъектом (http://en.wikipedia.org/wiki/Observer_pattern#Subject),, в то время как представления являются наблюдателями (http://en.wikipedia.org/wiki/Observer_pattern#Observer). также см .: mvc in http://webcourse.cs.technion.ac.il/234321/Winter2005-2006/ho/WCFiles/08-Design-Patterns.ppt

3 голосов
/ 21 ноября 2008

(Эта статья не является примером MVC AFAIK по той простой причине, что нет контроллера. Она ближе к привязке данных .net, если вы спросите меня.)
MVC - это не шаблон Observer. MVC занимается разделением интересов. Модель, Представление и Контроллер - все выполняют одну работу и доверяют остальным свою работу. В некотором смысле, контроллер «направляет» представление и сообщает ему, как реагировать на изменение (Pure MVC). Контроллер также соответствующим образом взаимодействует с моделью (ответственность за которую заключается в инкапсуляции данных и применении ограничений / правил). В MVC контроллер является отправной точкой для всех действий - пользовательский ввод сначала получает контроллер. Однако существуют варианты, такие как MVP, где пользовательский ввод сначала принимается представлением, а затем отправляется / синхронизируется с докладчиком.

Паттерн Observer - это место, где вы хотите наблюдать за другим объектом на предмет изменения состояния. Таким образом, вы можете сказать, что .net события следуют шаблону наблюдателя

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

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

1 голос
/ 21 ноября 2008

Я бы согласился, что статья не MVC. Это скорее реализация модели наблюдателя. Шаблон наблюдателя в .NET может быть реализован с помощью событий, как это было в статье.

MVC требует класс контроллера, который управляет тем, какое действие выполнить по запросу, сделанному либо из модели, либо из представления. Применение MVC - очень хорошая практика программирования, так как она значительно способствует разделению интересов. У вас будет более понятное, расширяемое и тестируемое приложение с mvc. Еще один момент, на который стоит обратить внимание: вы все равно можете применить шаблон наблюдателя к приложению MVC. Они не будут противоречить друг другу.

===========

Чтобы ответить на ваш второй вопрос: какая модель лучше? Я думаю, что ваш подход к разработке программного обеспечения довольно неправильный. Вы не должны слишком сильно беспокоиться об этих вещах, пока не столкнетесь с проблемой. например Если этот объект меняет состояние, мне нужны эти другие объекты, чтобы реагировать на него, поэтому я бы реализовал шаблон наблюдателя.

Если бы я был тобой, я бы сначала начал со стороны модели, а потом все взял.

...