Связь между разными частями модулей / комплектов приложения для максимальной развязки?

Я стараюсь сделать свое приложение максимально гибким, отделенным, насколько это возможно.

Я буду разбивать приложение на разные пакеты, которые будут выполнять четкие обязанности.

Теперь о моей главной заботе: как мне сделать так, чтобы два или более пакета обменивались информацией друг с другом?

Я изучал различные парадигмы, такие как безголовая CMS, архитектура микросервисов и т. Д., Которые вдохновляли меня.

Допустим, у меня есть UserBundle, который обрабатывает регистрацию и вход в систему пользователей. Тогда у меня есть еще одна связка, DashboardBundle. DashboardBundle отвечает не за управление пользователями, но для этого необходимо отображать сообщение «Hello John Doe» в верхней части строки меню.

Решения, которые я до сих пор думал:

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

  2. UserBundle будет предоставлять сервис UserManager или что-то подобное, то есть слой между UserBundle и любым другим Bundle / Code, нуждающимся в связи с UserBundle.

Два первых решения по-прежнему будут объединяться в пакеты, НО они могут разрабатываться совершенно независимо, хотя DashboardBundle, очевидно, зависит от UserBundle.

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

1

Решение

вы найдете ответ Вот Используемые концепции шаблонов проектирования — хорошее решение для развязки / сцепления и других проблем. Но приятно не преувеличивать и не усложнять ваше приложение.

0

Другие решения

Все в модульной системе должно быть независимым. Symfony использовал EventDispatcher для этой работы. Если вы создаете событие в Javascript, то вы вызываете это событие в другом модуле (Bundle). С помощью Eventdispatcher вы можете создать структуру, подобную системе подключений WordPress. Вы можете использовать KnpMenuBundle для меню. С EventDispatcher вы можете добавлять меню из разных пакетов.

0

ИМХО ты смешиваешь понятия. Части вашего приложения должны быть повторно используемыми (например, диспетчер пользователей, подключение к внешним службам и т. Д.), Которые должны быть пакетами. Затем, когда они представляют собой пакеты, вы решаете загрузить их как поставщика или как пакеты. Но основная часть вашего приложения должна быть в AppBundle, потому что эта часть должна быть наиболее специфичной для вашего приложения и по этой причине менее многократно используемым кодом.

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

Общие части вводятся в ваш AppBundle в виде сервисов или наследования (то есть для определения сущности), а ваша конкретная часть кода отвечает за знание того, как разговаривать с поставщиками или другими пакетами.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector