В чем разнице между Service, Hadler, Proccess в архитектуре бэкенд?

Приведу пример из опенсурс приложения

https://github.com/flowable/flowable-engine/tree/main/modules/flowable-job-service/src/main/java/org/flowable/job/service

Вот, я там увидел три интерфейса:

  1. JobService
public interface JobService {
    
    void scheduleAsyncJob(JobEntity job);
    
    JobQuery createJobQuery();

    TimerJobQuery createTimerJobQuery();

    SuspendedJobQuery createSuspendedJobQuery();

    DeadLetterJobQuery createDeadLetterJobQuery();
    
    HistoryJobQuery createHistoryJobQuery();
    
    JobEntity findJobById(String jobId);
...
  1. JobHandler
public interface JobHandler {

    String getType();

    void execute(JobEntity job, String configuration, VariableScope variableScope, CommandContext commandContext);
}
  1. JobProcessor
public interface JobProcessor {

    /**
     * Process the given {@link JobProcessorContext}.
     *
     * @param jobProcessorContext the {@link JobProcessorContext} to process
     */
    void process(JobProcessorContext jobProcessorContext);

}

Просто если в название есть

  • слово Repository, то понятно, что это обращение к хранилищу данных
  • слово Mapper или Mapping, то это сопоставление или отображение данных из одной сущности к другой.

Вопрос, о чем мне должны говорить слова Service, Hadler, Proccess в названии интерфейса.

UPD: И что из чего можно вызвать? Я понимаю, что в Service как правило хранится бизнес логика, и там может быть обращение и к Repository так и к Mapper. А к чему можно обращаться на уровне Hadler и Proccess?

Если рекомендуете литературу по данной теме, буду крайне признателен)


Ответы (1 шт):

Автор решения: ulxanxv

Что написано, то и говорит :
Service > это просто один из слоёв архитектуры

Цитата из статьи:

Сервисный слой (Service layer) — это шаблон проектирования, который инкапсулирует бизнес логику вашего приложения и определяет границу и набор допустимых операций с точки зрения взаимодействующих с ним клиентов.

Думаю, что звучит запутанно и сложно. Если простыми словами, то вы сосредотачиваете логику вашего приложения в одном (или нескольких) классе-сервисе, а в своих контроллерах обращаетесь к нему. Это избавляет от дублирования кода в разных участках системы, делая ваш контроллер действительно соответствующим букве S из SOLID.

Handler > в переводе "обработчик", видимо должен обрабатывать какое-то событие

Proccess > В переводе "процесс", видимо должен запускать выполнение какого-то процесса

Обращаться можно откуда угодно и куда угодно, ЕСЛИ ваш компонент находится на уровень ниже в контексте архитектуры.

→ Ссылка