Как создавать полностью модульные веб-приложения [закрыто]

34

В ближайшие месяцы мы собираемся начать проект, в котором мы возьмем систему, которую мы создали для клиента (v1), и восстановим ее с нуля. Наша цель с v2 состоит в том, чтобы сделать его модульным, чтобы этот конкретный клиент имел свой собственный набор используемых модулей, тогда другой клиент может использовать другой набор модулей в целом. Хитрость в том, что компания А может иметь ряд проверочных и пользовательских модулей, которые изменяют работу этой системы. Компания B может придерживаться стандартной процедуры оформления заказа, но настроить способ просмотра продуктов.

Каковы некоторые хорошие подходы к архитектуре приложений, когда вы создаете приложение с нуля, которое вы хотите иметь, Coreкоторое будет совместно использоваться всеми клиентами, при этом сохраняя гибкость для всего, что будет изменено специально для клиента?

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

Webnet
источник

Ответы:

26

Для достижения высокоорганизованной и отделенной модульности вы можете следовать иерархическому архитектурному шаблону MVC , иногда известному как Presentation-abstraction-control (хотя они не являются строго одинаковыми шаблонами). Кохана , сплав , Беглость и FuelPHP поддержка HMVC изначально * и HMVC подход Кохана в обсуждается в Scaling Web Applications с HMVC и оптимизация HMVC веб - приложений для производительности , по Сэм де Фрейсине .

К сожалению, CodeIgniter не поддерживает HMVC изначально. Я собрал свои собственные библиотеки, чтобы обеспечить некоторую поддержку HMVC в CodeIgniter, черпая вдохновение из codeigniter-modular-extensions-hmvc от wiredesignz . На nettus + есть очень хорошее введение в статью HMVC , в которой обсуждаются CodeIgniter и расширение wiredesignz. Следующее изображение и цитата из этого урока:

введите описание изображения здесь

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

Наконец, вы находитесь на правильном пути с ловушками, даже если вы принимаете архитектуру HMVC, будут некоторые проблемы, которые вам все равно придется решать с помощью ловушек, в зависимости от вашей реализации и уровня автоматизации, который вы ищете , Хорошее использование ловушек - это pre_controllerловушка, которая обеспечит, например, наличие всех зависимостей для установленных модулей.

* Могут быть и другие, о которых я не знаю.

Яннис
источник
1
Поддерживает ли ASP.NET MVC это?
Роберт Харви
@RobertHarvey Понятия не имею ...
Яннис
@ Роберт Харви Мне кажется, что это скорее шаблон, чем рамки. Может быть, я что-то упускаю, но я не понимаю, почему я не могу сделать это с наследованием в ASP.NET MVC.
Джереми
3
@ Джереми: Это становится сложно в представлениях, особенно если вы хотите повторно использовать части представлений. Это выглядит интригующим, но мне трудно визуализировать на уровне болтов и гаек.
Роберт Харви
На диаграмме выше, похоже, что представления верхнего уровня состоят из меньших представлений, расположенных ниже в иерархии. Это уже можно сделать в определенной степени сRenderAction()
Роберт Харви
5

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

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

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

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

PSR
источник
0

Вот несколько инструкций о том, как сделать модульный дизайн: https://class.coursera.org/saas/lecture/preview/9

также это: « SOA можно увидеть непрерывно, от более старых концепций распределенных вычислений и модульного программирования , через SOA и до современных практик гибридных приложений, SaaS , ...»

Организация кода HMVC сама по себе не обязательно приводит к модульности.

Гоце Рибески
источник