Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ваши мнение о моей архитектуре

444
06 января 2010 года
patison
323 / / 15.03.2007
Хотелось-бы услышать мнения (критику) относительно моей реализации некоего приложения (написанного на Java), с использованием паттерна MVC.
Приложение состоит из классов Java (модели), из сервлетов (контроллеры) и jsp (views).
Приложение очень маленькое и достаточно примитивное, и тут можно было обойтись вообще одним классом. Однако, хочется понять как делать Правильно, что-бы на проектах по-крупнее не изобретать велосипеды и не ходить по граблям.

Итак. Классы разбиты по пакетам:
classes.controllers - сервлет NewsController;
classes.models - класс NewsModel;
classes.strategies - классы GetNews (интерфейс), GetNewsDB, GetNewsXML.

Как всё работает. Приходит гет запрос (клиент зашёл на страницу) для сервлета NewsController. Контроллер определяет что нужно сделать (получить весь список новостей, или конкретную новость), создаёт объект модели - NewsModel , и вызывает нужный метод (скажем, GetNews()) а возвращённый результат отдаёт в jsp. Дальше, самое интересное - в конструкторе NewsModel определяется какая стратегия будет использоваться для получения новостей (GetNewsDB, GetNewsXML или какая-то другая), а в методе NewsModel::GetNews уже вызывается непосредственно метод выбранной стратегии для получения списка новостей.
Т.е. фактически получается нечто следующее:
1. Юзер запрашивает список новостей (средствами браузера).
2. NewsController обращается к модели для получения списка новостей
3. Модель выбирает какую стратегию использовать , и обращается к нужному методу (через интерфейс GetNews.java).
Ответ, в обратном порядке возвращается в контроллер, и оттуда отдаётся в отображение.

немного про интерфейс GetNews - Это абстрактный класс, который описывает интерфейс стратегии.

Кажется достаточно запутанным. Но надеюсь все поняли суть.
63
06 января 2010 года
Zorkus
2.6K / / 04.11.2006
Почему стратегия выбирается в конструкторе модели? И почему код поиска новостей у тебя, как я понял, находится внутри класса модели?
Модель это данные, а стратегия, - это собственно код, отвечающий за формирование/поиск новостей. Кстати, опиши поподробней, как работают классы GetNewsXML, GetNewsDB? что именно они делают?

Я бы сделал так -

1) юзер посылает запрос, в запросе кодируется в том числе информация, в каком виде новости желает получить юзер.
2) контроллер принимает запрос юзера и принимает решение о том, какую стратегию использовать (возможно, на основе некоторых параметров, переданных юзером в запросе).
3) Контоллер вызывает метод SelectedStrategy.getNews(), который возвращает экземпляр модели. Сама модель - это чисто данные.
4) Контроллер передает модель на страницу отображения новостей, где она парсится и показывается юзеру.

Советую почитать про архитектуру Apache Struts.
257
06 января 2010 года
kosfiz
1.6K / / 18.09.2005
Раз уж здесь мелькает MVC так может его и придерживаться?
Вьюхи, контроллеры, модели и прослойка для доступа к ним (моделям).

Действительно, по mvcшному модели делать ничего не должны. А GetNews, наверное, и должен выступить в роли "прослойки" для работы с моделью, т.е. определять как и каким образом с моделью поработать, чтобы выдать то, что нужно.
444
07 января 2010 года
patison
323 / / 15.03.2007
Цитата:
Почему стратегия выбирается в конструкторе модели?


Да, согласен, тут я не подумал просто куда мне лучше впихнуть выбор стратегии, потому сунул именно сюда.

Цитата:
И почему код поиска новостей у тебя, как я понял, находится внутри класса модели?


Не совсем так... Код поиска новостей находится классах-стратегиях (GetNewsDB, GetNewsXML), которые являются по сути независимыми классами реализующими выборку новостей из БД, и возврат их в Hashtable или List .

Цитата:
Модель это данные, а стратегия, - это собственно код, отвечающий за формирование/поиск новостей


Собственно, так и есть .. Модель в моём случае это как-бы мост, между контроллером и стратегией. Контроллер не знает о существовании стратегии, он знает что у модели есть метод GetNews . Всё. Уже в методе NewsModel::GetNews вызывается метод стратегии, который непосредственно и делает выборку данных и рассовывает результат должным образом в контейнеры (список, hashtable, ...).
Кстати тут вопрос.. насколько правилен такой подход, когда стратегии существуют независимо от модели и контроллера? Единственное что их объеденияет - так это схожее имя класса.

Цитата:
3) Контоллер вызывает метод SelectedStrategy.getNews(), который возвращает экземпляр модели. Сама модель - это чисто данные.


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

И кстати, по поводу

Цитата:
модели делать ничего не должны


Цитата:
Сама модель - это чисто данные.


Вот что я нашёл:

Цитата:
Модель является «сутью» системы и отвечает за непосредственные алгоритмы, расчёты и тому подобное внутреннее устройство системы.


источник этой цитаты

5
07 января 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: patison
Модель является «сутью» системы и отвечает за непосредственные алгоритмы, расчёты и тому подобное внутреннее устройство системы.


Есть минимум два понятия модели в контексте этого обсуждения:
1) модель предметной области
2) модель в MVC арихитектуре большинства веб фреймворков.

Модель предметной области - это именно модель некоего процесса или явления реального мира.

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

260
07 января 2010 года
Ramon
1.1K / / 16.08.2003
Цитата: patison
Хотелось-бы услышать мнения (критику) относительно моей реализации некоего приложения (написанного на Java), с использованием паттерна MVC.



О реализации говорят по коду, а об архитектуре можно сказать, что она есть :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог