Создание приложения модулятора с нуля - PullRequest
0 голосов
/ 08 сентября 2018

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

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

Любые предложения или рекомендации, которым я должен следовать, спасибо

1 Ответ

0 голосов
/ 08 сентября 2018

Я бы использовал (или работаю над) то, что я называю "Emvc" (или События и мини MVC).

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

Некоторые примеры.

Пользовательская система. Проблема с MVC. Вы положили эту систему в

  app/contolers/user
  app/models/user
  app/view/user ..

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

С Emvc вы бы структурировали его таким образом.

 app/plugins/user/contoller
 app/plugins/user/models
 app/plugins/user/views

Тогда вы зарегистрируете его для определенных событий, таких как события запроса для страниц, которые он тоже прослушивает. Я также слушал бы такие вещи, как getCurrentUser и т. Д. Это кажется простым. но что происходит, вы делаете что-то вроде этого

  //users bootstrap
 $Mediator->listen('GetCurrentUser')

 //called from some other plugin
 $Mediator->trigger('GetCurrentUser', $event)

Затем Посредник проверяет, есть ли у него слушатели для этого события, и, если это так, передает им четный объект. Затем слушатель возвращает пользователя и измененный объект события. И до тех пор, пока у вас есть надлежащие интерфейсы. Что это делает, так это тому, что звонящему больше не важно, откуда пришел пользователь. Это может быть от class OldUserSystem или class NewUserSystem, потому что у вас есть разделительный слой.

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

  $Users = new User();
  $CurrentUser = $Users->getCurrentUser();

Теперь, если вы замените class User чем-то другим, вы застряли, используя то же имя, с тем же вызовом метода или переписав свой код. Реализация слушателя скрыта от глаз. Возможно, пользовательская система вызывает этот метод foobar, звучит нелепо, но с событиями вы можете сделать это вызванным этим событием.

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

Еще один хороший пример - выставление счетов.

Кто-то что-то покупает на вашем сайте, используете ли вы Stripe, Paypal, Athorize dot net. С системой событий. Вы просто запускаете событие, чтобы doPayment отправлять информацию как часть объекта события. И любая платежная система, которая перечисляет, может справиться с этим. Вы можете изменить платежную систему, даже не касаясь чего-либо, вплоть до обработки.

и т.д ...

Я скажу вам, что строить это не тривиально. Это вопрос определения ответственности каждого «Плагина» и того, чтобы он делал только эти вещи, и таким образом, чтобы он был невидим для других «Плагинов».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...