Шаблоны проектирования PHP/JavaScript для веб-информационных систем

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

Но вот моя проблема. Создание такой системы означает создание всех этих компонентов:

  • PHP-бэкэнд
  • HTML-представления
  • CSS-стили
  • Интерфейс JavaScript
  • Асинхронные соединения AJAX

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

Но мне трудно получить архитектуру так, чтобы она мне нравилась. Вот что у меня есть до сих пор:

  • Вся основная система более-менее написана на процедурном PHP. Это решает URL-адрес запроса, занимается кэшированием, ведением журнала и отладкой, а также загружает другие компоненты.
  • PHP при создании страницы загружает в модуль файлы javascript, файлы CSS, файлы HTML и другие компоненты на основе текущего модуля. Это означает, что каждый модуль является настолько легким, насколько это возможно, и в то же время может быть расширен в соответствии с текущими потребностями модулей.
  • Система также включает компоненты объектов ООП (такие как «пользователи» или другие типы классов), которые можно использовать в масштабах всей системы.
  • Система построена на принципах MVC, но без ООП.

Но я действительно чувствую себя грязным из-за того, что построил основную систему процедурным способом. Сначала я начал писать его в ООП, но вскоре обнаружил, что у меня начинаются головные боли из-за необходимости подгонять все под одну и ту же систему. Это было ООП, но оно было тесно связано, что мне не нравилось, поскольку оно было написано в стиле ООП, компоненты были на самом деле не такими независимыми или были просто хлопотами в управлении.

Существуют ли какие-либо шаблоны или руководства, которым я мог бы следовать, чтобы получить лучший результат? Что мне нравится в текущей системе, так это то, что я могу вызывать что угодно, предварительный рендеринг PHP или HTML-представления, стили CSS, дополнительные функции Javascript и связь AJAX по запросу, сохраняя удивительно маленькую опорную поверхность, но она кажется грязной. Я даже использую глобальный для подключения к основной базе данных (хотя это глобальный объект).

Есть идеи? Это не было бы проблемой, если бы это был только один язык, но попытка заставить все работать вместе — это немного головная боль.

Спасибо!


person kingmaple    schedule 10.10.2011    source источник
comment
Вы исследовали какой-либо из тысяч фреймворков PHP/систем CMS/и т.д.? Есть масса примеров того, как это можно сделать.   -  person Mat    schedule 10.10.2011
comment
Очень сложно ответить на ваш вопрос, потому что вы не представляете никакой реальной проблемы. В настоящее время я работаю над такой системой, почти такой же, как ваша, но с некоторыми отличиями. Я использую MVC/ООП. Я не могу представить, что ты справляешься с этим процедурно. Я думаю, пока ваш проект не имеет каких-то границ, в ООП не должно быть никаких проблем.   -  person Imran Naqvi    schedule 10.10.2011
comment
Вы можете посмотреть шаблоны архитектуры корпоративных приложений, шаблоны GoF и т. д. и реализовать их самостоятельно. Однако самый простой (и самый очевидный) ответ — посмотреть, как фреймворки (которые уже столкнулись с этой точной проблемой) реализовали эти шаблоны и либо (а) использовать фреймворк, либо (б) адаптировать подходы фреймворка к вашему приложению. Ищите фреймворки с открытым исходным кодом в выбранной вами парадигме, изучайте, как они что-то делают, и смотрите, что перекликается с вашим приложением.   -  person Visionary Software Solutions    schedule 11.10.2011
comment
Может ли кто-нибудь из вас привести несколько примеров того, на какие фреймворки мне следует обратить внимание? Потому что их очень много, и многие из них чрезмерно сложны и занимают слишком много места. Есть ли что-нибудь очень легкое, что уже решает эти проблемы?   -  person kingmaple    schedule 11.10.2011


Ответы (2)


http://agiletoolkit.org/ реализует именно то, что вы ищете. Его исходный код доступен на http://github.com/atk4/atk4, так что вы можете учиться у там.

Многому я научился, создавая Agile Toolkit.

  • Посмотрите на настольные системы. - Cocoa, Objective Windows и другие объектно-ориентированные настольные системы давно решили эти проблемы. Создавайте представления, подключайте действия, определяйте обратные вызовы. Это сопоставляется с представлениями на основе шаблонов HTML, привязками JavaScript и запросами AJAX.

  • Дерево объектов среды выполнения. В Agile Toolkit первой фазой является инициализация. На этом этапе объекты вставляются друг в друга. Например, вы добавляете кнопку в форму и добавляете форму в страницу. Затем идет фаза рендеринга, которая рекурсивно создает HTML из всего. Это имеет гораздо больше смысла, чем наличие компонентов, повторяющих HTML.

  • Виджеты пользовательского интерфейса jQuery. Их использование было отличным способом решить многие проблемы. Представления в Agile Tolokit могут взаимодействовать с соответствующими виджетами пользовательского интерфейса jQuery.

  • Объекты, которые вы упомянули, являются «моделями» в Agile Toolkit. Если вы ищете автономную версию, вы можете положиться на какой-нибудь фреймворк ORM. Я сделал свой собственный, чтобы он был более тесно интегрирован с представлениями.

  • Пересмотреть расцепление. Если вы разрабатываете всю систему самостоятельно, то объединение дает вам много преимуществ. Особенно, если это объектно-ориентированная архитектура, и вы наследуете вещи. Вам понадобится некоторый опыт работы с Java или опыт разработки для настольных компьютеров, чтобы сделать это правильно.

Ссылки:

person romaninsh    schedule 10.10.2011
comment
Это не совсем то, что я ищу, но это, безусловно, ближе к тому, что я имею в виду, по сравнению с раздутыми фреймворками. - person kingmaple; 11.10.2011

Не зная ничего другого, мои мысли:

  • Если вам не нравился ваш ООП-код, возможно, вы его неправильно спроектировали. Идея объектной ориентации заключается в том, что объекты представляют вещи совершенно естественным образом, и поэтому с ними должно быть довольно легко работать. Если вам не нравится сцепление, есть способы это исправить.
  • Похоже, ваш шаблон MVC неверен. Все материалы HTML/CSS/JavaScript должны обрабатываться в аспекте просмотра. Мне кажется, что вы использовали одни принципы MVC, игнорируя другие. Конечно, без вашего кода это может быть только подозрением.
person Levi Morrison    schedule 10.10.2011
comment
Смотря как. MVC в самом классическом понимании отличается от того, как его обычно реализуют люди. Javascript и браузер — это контроллер, а не представление. Но помимо этого, моя главная проблема заключалась в том, что у меня был этот огромный единственный класс для основного движка, что было бессмысленно, поскольку от него зависело все. Я всегда считал, что если есть один экземпляр класса (а их никогда не может быть больше одного), то он вообще не должен быть классом. - person kingmaple; 11.10.2011
comment
Я согласен с частью JavaScript: это может быть что-то контроллерное. И если у вас может быть только один экземпляр класса (а их никогда не может быть больше одного), это не значит, что вам не следует создавать класс. Тем не менее, похоже, вы пытались присвоить ему класс «Бог». Не делай этого. - person Levi Morrison; 11.10.2011
comment
Но что бы вы могли порекомендовать мне посмотреть? Потому что мне нужна система с основными компонентами (такими как основной файл CSS, библиотека основных функций для PHP и JavaScript/AJAX, а также файл CSS, библиотеки функций и JavaScript/AJAX для каждого модуля по требованию). Я хочу как можно меньше занимать место, при этом каждый модуль может работать независимо. Теперь я согласен, что модули должны быть расширенными классами основного класса, но как построить архитектуру, чтобы это работало? Где было бы решение, если бы не в классе Бога? Мне просто нужно некоторое руководство, так как я не хочу идти на компромисс :) - person kingmaple; 11.10.2011
comment
@Kristovaher, я не совсем понимаю, о чем вы спрашиваете. Не могли бы вы обновить свой вопрос, указав схему наследования, которая у вас есть в настоящее время? Это было бы большим подспорьем для всех. - person Levi Morrison; 11.10.2011