Модераторы: Се ля ви

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Паттерн MVC (model-view-controller), Помогите разобраться 
:(
    Опции темы
LSD
Дата 22.11.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538



1. Вид только отображает данные. Сами данные он не хранит, но может хранить вспомогательную информацию (выделенная ячейка, где расположен курсор и т.п.). Он реагирует на события от модели (изменение данных) и на события от контролера (пользовательский ввод). Реагирует он только изменением отображения данных, сам он событий не порождает.

2. Модель хранит данные. Когда данные изменяются, то модель порождает событие изменения данных (данные могут меняться как извне через через методы модели, так и в нижележащем источнике данных, это не принципиально). Модель может быть связана с несколькими видами.

3. Контроллер обрабатывает пользовательский ввод и в зависимости от него дает команды модели изменить данные и виду изменить отображение данных (выделить строку, переместить фокус ввода и т.п.).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
arilou
Дата 22.11.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



ivashkanet, я же грю - это два разнах подхода. Вот, сравни мое описание:

1. Вид отображает данные и выполняет первичную обработку событий (кликанье мышкой, клава, и прочее, все то, что есть в дотнете в базовом классе формы и контролов). После первичной обработки вид должен продуцировать application-specific события. В твоей проге "системным" событием будет parentTable.SelectedRowChanged, а "application-specific" будет событие ParentRowChanged на уровне формы. Вид полностью отвечает за отображение данных и обработку пользовательского ввода.

2. Контроллер (презентер) - это посредник между видом и моделью. Он подписывается на события обоих, и содержит в себе application-specific логику - команды виду обновить свое содержимое (как реакция презентера на событие Вид.ParentRowChanged - выставить Вид.ChildDataSource = DataGateway.GetChildRows(Вид.CurrentParentRow)).

3. Модель - это бизнес и дата слои твоего приложения. Например, DataGateway - один из элементов модели.

Возможно, ты путаешься, потому что в дотнете MVC частично реализован: форма - это вид+контроллер. А то, что описываю я - это абстракция более выского уровня, независящая от языка/платформы. С ее помощью можно четко разделить код, управляющий внешним видом (форма, контролы, клики, измененение фокуса, подсвечивание, enable/disable и проч) от логики приложения - обращения к бизнес и дата уровням, обновление информации, etc.

Я использовал паттерн MVP для оконных и веб-проектов. А у mr.DUDA, например, отлично получалось с его помощью описывать контрол-дерево файлов.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
ivashkanet
Дата 22.11.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



Значит у LSD это MVC, а у arilou это MVP. 
Я так понимаю?

Если я построю свое приложение так:
1) View --- отображает данные и обрабатывает только те события, которые не требуют дополнительной информации о других объектах системы.
2) Model --- предоставляет интерфейс к БД и содержит данные которые отображаются во View (готовые 1:1)
3) Controller --- обрабатывает события, которые не смогла обработать View, отправляет запрос на изменение данных (к Model)

Все равно какой это будет паттерн (пусть даже IMVC -- ivashkanet-M-V-C)

(Этот подход соответствует схеме LSD)

Будет ли это нормально? Не нарвусь ли я где-нить на грабли в будущем?
PM MAIL WWW ICQ   Вверх
arilou
Дата 22.11.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: нет
Всего: 61



ivashkanet, кароча пиши код и выкладывай. Тада проще будет обсудить  smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
ivashkanet
Дата 22.11.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



arilou, скажешь тоже. 
От того какую выберу политику и будет зависеть код smile
Хотя неструктурированный он есть smile

PM MAIL WWW ICQ   Вверх
Exception
Дата 22.11.2006, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



Цитата(ivashkanet @  22.11.2006,  15:34 Найти цитируемый пост)
Значит у LSD это MVC, а у arilou это MVP. 


MVC - это Model-View-Controller, а MVP - Model-View-Presenter. По моему личному ИМХу, для разработки в C# более подходит именно второй паттерн.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Системный анализ, проектирование и UML"
Се ля ви

Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем:

• предпроектные обследования объектов автоматизации;

• разработка концепции создания систем;

• моделирование бизнес-процессов (в т.ч. на UML);

• проектирование архитектуры систем;

• управление проектами;

• управление качеством;

• CASE-средства;

• реинжиниринг.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Системный анализ, проектирование и UML | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.