Як створити повністю модульні веб-додатки [закрито]


34

У найближчі місяці ми розпочинаємо проект, коли ми беремо систему, яку ми створили для клієнта (v1), і відновлюємо її з нуля. Наша мета з v2 - зробити його модульним, щоб цей конкретний клієнт мав власний набір модулів, якими вони користуються, тоді інший клієнт може взагалі використовувати інший набір модулів. У цьому фокус полягає в тому, що компанія A може мати серію замовлень і користувальницьких модулів, які змінюють спосіб роботи цієї системи. Компанія B може дотримуватися стандартної процедури оформлення замовлення, але налаштувати спосіб перегляду продуктів.

Які існують хороші підходи до архітектури додатків, коли ви створюєте додаток з нуля, який ви хочете мати, Coreщо ділиться між усіма клієнтами, зберігаючи гнучкість для чого-небудь, що може бути змінено спеціально для клієнта?

Я бачив гачки CodeIgniter і не думаю, що це гарне рішення, оскільки ми могли б закінчитися 250 гачками, і це все ще недостатньо гнучко. Які ще є рішення? В ідеалі нам не потрібно буде малювати лінію на піску.

Відповіді:


26

Щоб досягти високоорганізованої та нерозділеної модульності, ви можете слідувати архітектурній схемі Ієрархічного MVC , іноді відомому як «Презентація – абстракція – контроль» (хоча вони не є абсолютно однаковою схемою). Кохана , сплав , Швидкість і FuelPHP підтримка HMVC спочатку * і HMVC підхід Кохана в обговорюється в Scaling Web Applications з HMVC і оптимізація HMVC веб - додатків для продуктивності , по Сем де Фрейсіне .

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

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

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

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

* Можуть бути й інші, про яких я не знаю.


1
Чи підтримує ASP.NET MVC підтримку цього?
Роберт Харві

@RobertHarvey Я поняття не маю ...
yannis

@ Роберт Харві Мені це здається більше моделлю, ніж рамкою. Можливо, мені чогось не вистачає, але я не можу зрозуміти, чому я не можу зробити це із спадщиною в ASP.NET MVC.
Джеремі

3
@Jeremy: Це стає складним у поглядах, особливо якщо ви хочете повторно використовувати частини поглядів. Це виглядає інтригуюче, але мені важко візуалізувати на рівні гайок і болтів.
Роберт Харві

На діаграмі вище виглядає так, що подання верхнього рівня складаються з менших подань, розташованих нижче в ієрархії. Це вже можна зробити певною мірою за допомогоюRenderAction()
Роберт Харві

5

Я не хлопець PHP, але з боку Java-скрипту, якщо у вас буде багато модулів, які ви хочете зберегти як можна більш незалежними, для цього є кілька систем, таких як RequireJS , які мають Java-скрипт модулі, які декларують залежності від інших модулів, а фреймворк гарантує, що вони завантажуються при необхідності.

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

Ці рамки не застосовуються настільки сильно (або, можливо, взагалі), якщо ваш серверний каркас обробляє це або генерує ваш Java-скрипт для вас, але ви, можливо, хочете, щоб ваш Java-скрипт був незалежним від вашої серверної системи.

Якщо у вас немає занадто багато Java-скрипту, але ви хочете певної модульності, ви завжди можете дотримуватися анонімних функцій самовиклику, які керують залежностями, спочатку впорядковуючи теги сценарію залежностями та посилаючись один на одного, зареєструвавши себе одним об'єктом у глобальний простір імен. Це принаймні робить їх майже модульними і не коштує великих витрат на реалізацію.


0

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.