Devim Front: Service
Содержит реализацию шаблона проектирования "сервис" и его вариации.
Установка
Подключите этот пакет в зависимости:
npm i -S @devim-front/service
Общие концепции
Перед тем, как описывать API библиотеки, следует сказать пару слов о сервисах и условиях их применений.
Сервис
Сервис - это класс, содержащий методы для работы с какой-либо логической сущностью, способный иметь промежуточное состояние.
Что такое сервис, проще всего объяснить, сравнивая его с хэлпером. Напомним, хэлпер - это статический класс, содержащий функционально чистые методы, предназначенные для работы с какой-либо одной логической сущностью (дата, денежная сумма, телефон и тому подобное). Но, если вдруг потребуется сохранить внутри класса некое промежуточное состояние (например, объявить статическое свойство), использовать хэлпер для этой цели уже нельзя, поскольку тогда методы потеряют функциональную чистоту. В этом случае вместо хэлпера стоит использовать сервис.
Поскольку сервис хранит своё промежуточное состояние - раз, - и, два, зависит от других сервисов, простое удаление экземпляра его класса чревато побочными эффектами и утечками памяти. Чтобы решить эту проблему, у каждого сервиса есть метод dispose, который следует вызвать перед уничтожением экземпляра. При написании собственного сервиса в этом методе следует освободить все ресурсы занятые ресурсы, отписаться ото всех событий и вызвать методы dispose
у всех вложенных экземпляров, если такие есть.
Чтобы один сервис мог реагировать на изменение состояния другого сервиса, используется механизм событий. У каждого экземпляра есть методы on, off и emit, полностью аналогичные соответствующим методам класса EventEmitter из API NodeJS. По умолчанию сервис умеет генерировать лишь событие dispose
, уведомляющее, что экземпляр сервиса готовится к удалению. Сам же метод dispose
удаляет все подписавшиеся на экземпляр обработчики, поэтому не нужно каждый раз делать этого вручную.
Глобально сервисы делятся на два типа: свободные и одиночные.
Документация находится в разработке.