@Dubrovin

Как реализовать паттерн модуль на PHP?

Дано:
1. Главный класс приложения (фреймворк, апп или т.п.)
2. Классы модулей (отдельных частей) приложения (могут быть со статическими методами или нет)

Как в зависимости от условий в главном классе подключать классы модулей и использовать их методы через главный класс (чтобы главный класс являлся фасадом)? Есть ли примеры реализации паттерна модуль на PHP?
Google не помог, к сожалению.
  • Вопрос задан
  • 496 просмотров
Пригласить эксперта
Ответы на вопрос 3
SerafimArts
@SerafimArts
Senior Notepad Reader
Это называется интерфейсы и автолоадинг.
Ответ написан
Комментировать
@AndreuChel
Программист .NET
«Модуль» — это популярная реализация паттерна, инкапсулирующего приватную информацию, состояние и структуру, используя замыкания. Это хорошее решение для того, чтобы скрыть внутреннюю логику от посторонних глаз и производить всю тяжелую работу исключительно через интерфейс, который вы определите для использования в других частях вашего приложения.
Этот паттерн применим только в языках, типа JavaScript, т.к. там нет настоящей приватности и в отличии от некоторых традиционных языков, он не имеет модификаторов доступа.

В традиционных ООП языках нужное вам поведение реализуется за счет основных концепций ООП - инкапсуляция, наследование и полиморфизм.
Модульность - это и есть полиморфизм, когда есть базовый класс (интерфейс), которым оперирует фасад. В зависимости от условий ему подсовываются те или иные классы, унаследованные (реализующими интерфейс) от базового.
Ответ написан
@Dubrovin Автор вопроса
Я в общем нашёл решение. Головной класс Framework наследуется от Singleton. Экземпляры отдельных классов (модулей) создаются в методе init класса Framework через new и сохраняются в свойства класса Framework. Модули общаются друг с другом только через фреймворк из любой части кода, например Framework::i()->file_system->get_contents( $file ). Таким образом, модули ничего не знают друг про друга. Если модуль при каких-либо условиях не должен загружаться, то он оборачивается в условие в методе init и экземпляр этого модуля не создаётся.
Очень странно, что мало кто разбирается в архитектуре и все дают ответы в виде "лозунгов" без конкретных примеров кода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы