Задать вопрос
@ScRsa
Delphi/Oracle Изучаю JAVA

Куда вынести специфичную логику сервиса?

Суть вопроса вот в чем.
Есть сервис @Service для работы с документами (создание,удаление,...). Проблема в том что некоторые операции могут иметь специфичные особенности в зависимости от типа документа. Например при удаление одного документа нужно почистить какие то его дополнительные данные, при удалениии другого проверить можно ли его удалять, при удалении третьего скопировать его на хранение и т.д. Сам сервис выполняет общую логику (логирование, общие проверки, фактическое удаление), а куда вынести специфичную для документа?

Наследовать специфичный сервис от общего и перекрывать методы? Но тогда придется частично дублировать общий код. Или в общий метод удаления внедрить метод делегат, который на время передает управление специфичному коду, а потом возвращается в основной? Или как правильно? что то я запутался)
  • Вопрос задан
  • 174 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@sirs
Попробуйте использовать паттер strategy.
Создаете enum с перечислением всех типов документов и под каждый тип пишите обработчик, обработчик содержит методы save, read, edit и т.п. для каждого типа документа. Также делаете дефолтовую реализацию, если для какого-нибудь типа документа не нужно менять логику. В своем общем сервисе будете в runtime вызывать обработчик для типа документа и выполнять нужные методы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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