Дисциплины > Реализация

Реализация шаблона MVC

(1/2) > >>

Galogen:
Я уже имел консультацию по этому вопросу. Мне было сказано, что я не понимаю назначение MVC, вполне возможно. Даже наверняка. Да нет же совершенно не знаю :) Но хочу знать.

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

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

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

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

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

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

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

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

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

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

Andrey Gusev:
Здравствуйте,

паттерн 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, все должно стать на свои места.

Виктор Малышко:
Полагаю, в начале темы вопрос про MVC из книги Фаулера, который не тождественен смолтоковскому, но очень смахивает на то, что описано во втором посте.

Andrey Gusev:

--- Цитата: Galogen от 21 Октября 2008, 22:49:10 ---Однако я слышал, читал, видел - что MVC активно используется для веб-приложений. Фаулер даже напирал при этом как на особенность веб-приложений.

--- Конец цитаты ---

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

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

RuZzz:
up

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
Перейти к полной версии