Форум Сообщества Аналитиков

×


Реализация шаблона MVC(Прочитано 25852 раз)
Реализация шаблона MVC : 21 Октября 2008, 22:49:10
Я уже имел консультацию по этому вопросу. Мне было сказано, что я не понимаю назначение MVC, вполне возможно. Даже наверняка. Да нет же совершенно не знаю :) Но хочу знать.

Однако я слышал, читал, видел - что MVC активно используется для веб-приложений. Фаулер даже напирал при этом как на особенность веб-приложений.

Так вот возможно где-то что-то все-таки понимая, мне хотелось окончательно разобраться с применением MVC на практической задачки.

Задачка следующего типа:
пусть имеется клиент. который делает в какой-то он-лайн системе заказы. Не в даваясь во все возможные ситуации ограничимся двумя часто возникающими вариантами.
1. авторизация (без авторизации можно только посмотреть главную страницу, ну поизучать каталог, почитать сопутсвующую информацию, для создания же заказа нужно регистрироваться и потом уже авторизироваться)
2. создание нового заказа.

Пусть имеем следующую структуру:
Клиент - тот, кто делает заказ
Пользователь - некто, имеющий учетную запись, которая может быть ассоциирована с заказом (если регистрация идет с фронтэнда)
Заказ - сушность содержащая информацию о номере, дате, кому доставить, куда доставить, ну и общая сумма заказа
Строка заказа - часть заказа содержащая сведения о том, что заказываем, сколько
Товар - то что собственно заказывается

При авторизации:
Пользователь вводит логин и пароль
Система узнает пользователя, приветствует и предоставляет ему соответствующий доступ

Возможный сценарий реализации может выглядеть так:
1 Пользователь вводит url сайта в командную строку браузера.
2. браузер отображает Главную страницу сайта
3. Пользователь вводит логин и пароль в поля Формы авторизации и нажимает кнопку Войти
4. Браузер пользователя отправляет http- запрос, содержащий введенные значения логина и пароля, Web-серверу
5. Web-сервер перенаправляет запрос соответствующему Скрипту (по сути методу некоего класса-контроллера)
6. Класс-контроллер, выполняя метод, инстанцирует объект Пользователь с параметрами Логин и Пароль:
    если такой объект существует в БД, тогда запускается метод получить данные Клиента
    если такого объекта нема, создается сообщение-уведомление
7. Получив данные Класс-контроллер отправляет пользователю на браузер соотвествующую страницу сайта

Как полагаете пойдет такое?

Как это может выглядеть в виде некоего кода?

1. как я понимаю на action формы будет просто передача параметров нужному скрипту
2. в скрипте инстанциируется контроллер, который получает параметры и запускает метод, который
3. инстанциирует объект бизнес-логики, который
4  посылает запрос в БД
и в обратном порядке?

В общем чего не так? Не слишком все кудряво?



Re: Реализация шаблона MVC Ответ #1 : 29 Октября 2009, 15:24:09
Здравствуйте,

паттерн MVC наверное самый замученный паттерн. Собственно он перестал быть паттерном как таковым, сейчас можно говорить о семействе паттернов MVC. Можно ввести в codeproject.com запрос MVC и увидеть реализации с абсолютно непохожими друг на друга  связями между M-V-C (собственно и сами M,V,C многие трактуют по-разному).

Это произошло из-за того, что паттерн в первоначальном виде (SmallTalk) для большинства задач просто неприменим.  Паттерн жив, видимо, потому, что заложенная в нем идея вообще-то работает и способна приносить бизнес-эффект.

В оригинальном MVC: контроллер - это просто преобразователь движений мыши, прерываний от клавиатуры и в нечто осмысленное, вроде "нажата кнопка А". Ну просто не было во времена SmallTalk ни WinForms, ни MFC, ни Qt, ни даже TurboVision. Эти фреймворки это "C" и "часть V" из комлекта MVC. Эсли вы используете эти фреймворки, то вы реализуете "оставшуюся часть V" и "M". Попытка натянуть их снова на паттерн MVC порождает разночтения.

Единственное применение чистого MVC, которое я вижу сейчас - это консольное приложение: Model - бизнес-логика, Controller (модуль управляющий InputStream), View (модуль, управляющий OutputStream).

Когда сегодня говорят MVC (Ruby on Rails, MVC.Net, Castle.Net) на самом деле имеют ввиду Model View Presenter. Где View, наконец-то получил право иметь методы вида OnButton1Pressed и по шаблону Observer сообщать о событиях Presenter -у. A Presenter наконец-то полноправно организует взаимодействие Model и View так, что Model ничего не знает о View.

Посмотрите паттерн Model View Presenter, все должно стать на свои места.

« Последнее редактирование: 29 Октября 2009, 15:32:20 от Andrey Gusev »



Re: Реализация шаблона MVC Ответ #2 : 30 Октября 2009, 19:44:30
Полагаю, в начале темы вопрос про MVC из книги Фаулера, который не тождественен смолтоковскому, но очень смахивает на то, что описано во втором посте.



Re: Реализация шаблона MVC Ответ #3 : 09 Ноября 2009, 17:20:28
Однако я слышал, читал, видел - что MVC активно используется для веб-приложений. Фаулер даже напирал при этом как на особенность веб-приложений.

Видимо, Фаулер прочитал мой пост и передумал (и дату своей статьи задним числом поставил):
GUI Architectures - http://martinfowler.com/eaaDev/uiArchs.html
Есть непрофессиональный перевод этой статьи http://www.rusdoc.ru/articles/18358/.

В ней MVC - не очень рекламируется, а рекламируется MVP.



Re: Реализация шаблона MVC Ответ #4 : 24 Марта 2011, 13:23:29
up
« Последнее редактирование: 14 Июля 2012, 20:38:27 от RuZzz »



Re: Реализация шаблона MVC Ответ #5 : 14 Июля 2012, 20:36:51
а как правильно изобразить MVC на диаграмме классов?
« Последнее редактирование: 14 Июля 2012, 20:38:42 от RuZzz »



Re: Реализация шаблона MVC Ответ #6 : 14 Июля 2012, 22:23:08
а как правильно изобразить MVC на диаграмме классов?
Тут следует уточнить направление навигации. Так вот она следующая
      С
   /    \
  v      v
V  ->   M

Но следует понять, что MVC все-таки архитектурный стиль, паттерн, образец. Чем шаблон проектирования



Re: Реализация шаблона MVC Ответ #7 : 14 Июля 2012, 23:58:33
Ну вообщем в фрэймворке, который я использую там есть базовый класс Controller, для модели используется базовый класс CActiveRecord(для работы с БД), ну а класса представления там вообще не предполагается, вместо него просто папка, где собраны представления с элементами html.

Так вот можно предположить, что есть некий контроллер UsersController наследник Controller, Некая модель Users наследник CActiveRecord. Ну и создадим класc UsersView, который будет показывать(представлять) наших пользователей.

Базовые классы я думаю мы рисовать не будем, так как это не имеет отношения к MVC. А вот сами отношения между UsersView Users  UsersController интересны. Какие это отношения зависимости? Контроллер зависит от View и Model, Model ни от кого не зависит, View зависит от Model?



Re: Реализация шаблона MVC Ответ #8 : 15 Июля 2012, 22:23:45
Базовые классы я думаю мы рисовать не будем, так как это не имеет отношения к MVC. А вот сами отношения между UsersView Users  UsersController интересны. Какие это отношения зависимости? Контроллер зависит от View и Model, Model ни от кого не зависит, View зависит от Model?
Не совсем понял о чем идет речь, но отвечая на вопросы, нужно уточнить Контролер не зависит, а знает. Ведь он должен знать о представлении и о модели. Представление должно знать модель, которую оно представляет. А модель вот ничего ни о ком не знает. Такая вот она самодостаточная.
Каким образом все это реализуется зависит от технологий и конкретных паттернов.




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19