Шаблон локатора услуг - Service locator pattern

В шаблон локатора услуг это шаблон дизайна используется в разработка программного обеспечения инкапсулировать процессы, связанные с получением услуги, с сильным слой абстракции. В этом шаблоне используется центральный реестр, известный как «локатор служб», который по запросу возвращает информацию, необходимую для выполнения определенной задачи.[1] Сторонники шаблона говорят, что этот подход упрощает приложения на основе компонентов, где все зависимости четко перечислены в начале всего проекта приложения, что, следовательно, делает традиционное внедрение зависимостей более сложным способом соединения объектов. Критики паттерна утверждают, что это антипаттерн который скрывает зависимости и затрудняет тестирование программного обеспечения.[2][нужен лучший источник ]

Преимущества

  • «Локатор услуг» может действовать как простой время выполнения компоновщик. Это позволяет добавлять код во время выполнения без повторной компиляции приложения, а в некоторых случаях даже без его перезапуска.
  • Приложения могут оптимизировать себя во время выполнения, выборочно добавляя и удаляя элементы из локатора служб. Например, приложение может обнаружить, что у него есть лучшая библиотека для чтения изображений JPG, чем библиотека по умолчанию, и соответствующим образом изменить реестр.
  • Большие разделы библиотеки или приложения можно полностью отделенный. Единственной связью между ними становится реестр.
  • Приложение может использовать несколько структурированных локаторов сервисов, предназначенных для определенной функциональности / тестирования. Локатор служб не требует наличия одного статического класса для каждого процесса
  • Решение может быть проще с помощью локатора сервисов (по сравнению с внедрением зависимостей) в приложениях с хорошо структурированным дизайном компонентов / сервисов. В этих случаях недостатки можно фактически рассматривать как преимущество (например, нет необходимости предоставлять различные зависимости каждому классу и поддерживать конфигурации зависимостей)

Недостатки

  • Реестр скрывает зависимости класса, вызывая ошибки времени выполнения вместо ошибок времени компиляции, когда зависимости отсутствуют (аналогично использованию Внедрение зависимости ). Но каждая библиотека компилируется, просто обнаружение конкретного класса может не быть обнаружено и вызвать ошибку, это скорее проблема развертывания, чем проблема локатора служб.
  • Реестр усложняет код тест, поскольку все тесты должны взаимодействовать с одним и тем же глобальным классом локатора сервисов, чтобы установить поддельные зависимости тестируемого класса. Однако это легко преодолевается путем внедрения классов приложений с помощью единого интерфейса локатора служб. Симулятор может быть реализован для имитации каждого интерфейса, предоставляемого локатором сервисов, поэтому можно легко заменить реальную реализацию симулятором.

Смотрите также

Рекомендации

  1. ^ http://martinfowler.com/articles/injection.html#UsingAServiceLocator
  2. ^ Seemann, Марк. «Сервисный локатор - это антишаблон». blog.ploeh.dk. Получено 2017-06-01.

внешняя ссылка