Компонентация сложной функциональности в веб-приложении MVC - PullRequest
0 голосов
/ 07 июня 2010

Это вопрос об архитектуре веб-приложения MVC и о том, как ее можно расширить. для обработки составляющих умеренно сложных единиц функциональности.

У меня есть веб-приложение в стиле MVC со страницей оплаты кредитной картой.

Меня попросили разрешить администраторам также вводить платежи по кредитным картам, для случаев, когда по телефону принимаются кредитные карты.

В настоящее время раздел веб-сайта, посвященный списанию средств с кредитной карты это собственный контроллер, примерно с 3 страницами и логином. Этот контроллер отвечает за:

  • Проверка подлинности учетных данных для входа в систему
  • Сбор данных кредитной карты
  • Вызов библиотеки для фактической оплаты.
  • отчет о результатах пользователю.

Я хотел бы извлечь страницы сбора данных о картах в компонент что-то вроде того, чтобы я мог легко повторно использовать код на стороне администратора приложения.

В настоящее время мои компоненты ограничены одним просмотром страниц в стиле PHP встроенный код Perl.

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

Для простоты, я думаю, я предпочитаю композицию наследованию, хотя она и будет требует написания нескольких сквозных методов (действий). Будучи Perl, я мог бы в теория множественного наследования.

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

Спасибо.

1 Ответ

1 голос
/ 07 июня 2010

Создайте компонент (класс?), Который обернет все специфические функции cc, и предоставьте его через соответствующие методы / функции.

Используйте композицию, чтобы предоставить своим контроллерам, как клиенту, так и администратору, экземпляр компонента cc, и оба должны вызывать соответствующие методы для достижения того, что должно произойти.

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

Надеюсь, мы говорим об одних и тех же вещах, MVC можно применять на самых разных уровнях, что иногда сбивает с толку.

...