Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
php:shablony_proektirovanija:additionally:service_locator [2023/08/07 23:41] werwolf |
php:shablony_proektirovanija:additionally:service_locator [2023/08/07 23:45] (текущий) werwolf [4.1.3. Диаграмма UM] |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== 4.1. Локатор Служб (Service Locator) ====== | + | ====== 4.1. Локатор Служб (Service Locator)====== |
| **Этот шаблон считается анти-паттерном!** | **Этот шаблон считается анти-паттерном!** | ||
| Строка 5: | Строка 5: | ||
| Некоторые считают Локатор Служб анти-паттерном. Он нарушает принцип инверсии зависимостей ([[https://ru.wikipedia.org/wiki/Принцип_инверсии_зависимостей|Dependency Inversion principle]]) из набора принципов [[https://ru.wikipedia.org/wiki/SOLID|SOLID]]. Локатор Служб скрывает зависимости данного класса вместо их совместного использования, как в случае шаблона Внедрение Зависимости ([[https://ru.wikipedia.org/wiki/Внедрение_зависимости|Dependency Injection]]). В случае изменения данных зависимостей мы рискуем сломать функционал классов, которые их используют, вследствие чего затрудняется поддержка системы. | Некоторые считают Локатор Служб анти-паттерном. Он нарушает принцип инверсии зависимостей ([[https://ru.wikipedia.org/wiki/Принцип_инверсии_зависимостей|Dependency Inversion principle]]) из набора принципов [[https://ru.wikipedia.org/wiki/SOLID|SOLID]]. Локатор Служб скрывает зависимости данного класса вместо их совместного использования, как в случае шаблона Внедрение Зависимости ([[https://ru.wikipedia.org/wiki/Внедрение_зависимости|Dependency Injection]]). В случае изменения данных зависимостей мы рискуем сломать функционал классов, которые их используют, вследствие чего затрудняется поддержка системы. | ||
| - | ===== 4.1.1. Назначение ===== | + | ===== 4.1.1. Назначение===== |
| Для реализации слабосвязанной архитектуры, чтобы получить хорошо тестируемый, сопровождаемый и расширяемый код. Паттерн Инъекция зависимостей (DI) и паттерн Локатор Служб — это реализация паттерна Инверсия управления (Inversion of Control, IoC). | Для реализации слабосвязанной архитектуры, чтобы получить хорошо тестируемый, сопровождаемый и расширяемый код. Паттерн Инъекция зависимостей (DI) и паттерн Локатор Служб — это реализация паттерна Инверсия управления (Inversion of Control, IoC). | ||
| - | ===== 4.1.2. Использование ===== | + | ===== 4.1.2. Использование===== |
| С ''Локатором Служб'' вы можете зарегистрировать сервис для определенного интерфейса. С помощью интерфейса вы можете получить зарегистрированный сервис и использовать его в классах приложения, не зная его реализацию. Вы можете настроить и внедрить объект Service Locator на начальном этапе сборки приложения. | С ''Локатором Служб'' вы можете зарегистрировать сервис для определенного интерфейса. С помощью интерфейса вы можете получить зарегистрированный сервис и использовать его в классах приложения, не зная его реализацию. Вы можете настроить и внедрить объект Service Locator на начальном этапе сборки приложения. | ||
| - | ===== 4.1.3. Диаграмма UML ===== | + | ===== 4.1.3. Диаграмма UM ===== |
| - | {{..:..:_images:uml23.png|Alt ServiceLocator UML Diagram}}===== 4.1.4. Код ===== | + | {{:php:shablony_proektirovanija:additionally:121wqsd.png |}} |
| + | }===== 4.1.4. Код ===== | ||
| Вы можете найти этот код на [[https://github.com/domnikl/DesignPatternsPHP/tree/main/More/ServiceLocator|GitHub]] | Вы можете найти этот код на [[https://github.com/domnikl/DesignPatternsPHP/tree/main/More/ServiceLocator|GitHub]] | ||
| Строка 105: | Строка 106: | ||
| </code> | </code> | ||
| - | ===== 4.1.5. Тест ===== | + | ===== 4.1.5. Тест===== |
| Tests/ServiceLocatorTest.php | Tests/ServiceLocatorTest.php | ||