Мое приложение толстого клиента принадлежит шаблону MVC? - PullRequest
2 голосов
/ 28 февраля 2010

Веб-приложение, над которым я сейчас работаю, развивает руки и ноги! По сути, это система администрирования, которая помогает пользователям отслеживать бронирования, учетные записи пользователей, выставление счетов и т. Д. К ней также можно получить доступ через несколько различных веб-сайтов с использованием довольно грубого API.

Конструкция толстого клиента слабо соответствует шаблону MVC (или, возможно, MVP) с бэкэндом php / MySQL, Front Controller, несколькими разнородными контроллерами страниц, либеральным сцеплением объектно-ориентированных и процедурных моделей, запутанной связкой видов и шаблоны, некоторые скрипты Java, CSS-файлы и объекты Flash.

Программист во мне - большой поклонник принципа «Разделение проблем», и на этой ноте я сейчас пытаюсь найти лучший способ отделить и объединить различные проблемы по мере роста проекта и все больше людей вносят в него свой вклад.

Проблема, с которой мы сталкиваемся, заключается в том, что, хотя JavaScript (или Flash с ActionScript) обычно пишется с шаблоном, следовательно, является частью View и отделен от Controller и Model, мы обнаруживаем, что он фактически охватывает весь шаблон MVC. .. Обмен изображения с событием onmouseover - это поведение. Визуализируйте сетку данных - мы манипулируем представлением. Отправьте результат переупорядочивания списка через AJAX - теперь мы находимся в контроле. Проверьте поле формы, чтобы убедиться, что адрес электронной почты имеет правильный формат - мы обращаемся к модели.

Разумно ли, чтобы люди из базы данных писали Модель проверки с помощью jQuery? Могут ли программисты php написать необходимые управляющие структуры на JavaScript? Могут ли веб-дизайнеры действительно написать функциональную форму AJAX для своего View? Должен ли быть JavaScript-оверлорд для каждого проекта?

Если бы шаблон MVC мог применяться к людям вместо кода, мы бы получили следующее:

  • Модель - столбцы базы данных - «ВЫБРАТЬ * ОТ mind ГДЕ interested НЕДЕЙСТВИТЕЛЕН»
  • Управление - надоедливые программисты - «класс Что-то расширяет NothingAbstractClass {…}»
  • View - традиционно область графического / веб-дизайнера - «»

… и новый слой:

  • Поведение - дизайнер взаимодействия и обратной связи - «CSS3 - новый черный…»

Итак, мы проводим рефакторинг, и я хотел бы придерживаться наилучшей практики проектирования, но я не уверен, что делать дальше. Я не хочу изобретать велосипед, поэтому у кого-нибудь будут какие-либо советы или подсказки относительно того, на какой шаблон я должен смотреть или какие-либо примеры кода от кого-то, кто уже сделал грязную работу? Как программист, как я могу переписать приложение для бэкэнда и внешнего интерфейса, сохранив их отдельно?

И прежде чем вы спросите, да, я посмотрел на Zend, CodeIgnitor, Symfony и т. Д., И нет, похоже, они не пересекают границу между серверной логикой и клиентской логикой!

1 Ответ

1 голос
/ 26 марта 2010

Вы и все остальные, у кого есть мозг, задают этот вопрос, и он липкий. Действительно хороший Информационный Архитектор думает с точки зрения удобства использования, поведения и потока, хотя он / она может даже не знать, как использовать инструменты дизайна или уметь рисовать или программировать. Если они могут получить интерфейс в эскиз, дизайнеры могут сделать его красивым. Позвольте дизайнерам делать то, что нужно СТАТИКУ, - это то, что они умеют делать. Предоставьте IA библиотеку внешних интерфейсов, которые они могут указать для экранных объектов. Они не реализуют это, они только используют его. Это гораздо проще, если вы используете интерфейсный инструмент, такой как JQuery, и замечательно, если у вас есть гуру, который хорошо разбирается как в дизайне, так и в интерфейсе. Разделяйте ваши javascripts в их собственный каталог и всегда связывайте их как внешние файлы. Все PHP-фреймворки имеют методы, которые делают это динамически. Я поиграл с идеей структуры конфигурации, которая сопоставляет файлы со всеми внешними компонентами, которые они загружают, так что каждое отдельное представление загружает только то, что ему нужно. Но вы абсолютно правы: для клиентской стороны существует целая другая подпрограмма MVC, которая в основном относится к представлениям всего MVC. Я думаю, что вы можете разделить содержимое Ajax (когда представление должно ссылаться на сервер), я документирую методы контроллера Ajax как методы ajax и не вызываю их иначе. Многое из того, что все в вашей команде покупают в парадигме разделения труда. Это просто заставит их писать более разрозненный код многократного использования независимо от того, какую платформу вы в конечном итоге выберете. И вы правы, вы можете выполнить инкапсуляцию внешнего интерфейса со всеми из них, но НИКАКОЙ из них не обеспечит хорошую инкапсуляцию внешнего интерфейса, я думаю, что это все еще в сфере DYI. Удачи.

...