Как лучше назвать класс реализующий бизнес-фукнционал (севрис? команда?)?
Например, есть класс ClientCreator, который реализует логику создания в системе нового клиента. Этот класс внутри себя создаёт записи User и Client, сохраняет их в БД и триггерит события. Этот класс принимает все необходимые аргументы для работы через конструктор и имеет публичный метод execute, который и делает всю работу.
Работа с классом идёт по следующей схеме:
1. Инстанцируется экземпляр;
2. Экземпляр конфигурируется. Например, отмечаем doNotSendEmailNotification = false и даём ссылку на генератор паролей, чтобы генерить пароли для новых пользователей;
3. В кач-ве обязательного параметра - это исходные данные формы, на основе которых всё будет расчитываться и создаваться.
4. Вызываем метод execute(). Метод ничего не возвращает, но если есть ошибки, то выбрасывается исключение.
Как я понимаю, этот класс относиться к сервисному слою приложения. Как принято называть такие классы? ClientCreatorService? И есть какая-то концептуальная разница между такими сервисами, которые настраиваются в момент инстанцирования и, очевидно, могут работать только с 1 экземпляром формы (execute отработал и всё, хочешь другую форму обработать - создавай новый экземпляр), и сервисами, которые в execute могут принимать какие-то параметры (создал сервис, и в цикле вызываешь execute для нужной формы)?
То что ты описал является Командой. Принципиальная разница, видна из твоего же вопроса, передавая через конструктор, ты можешь сохранить состояние - но при этом отложить выполнение команды, когда как во втором случае ты сразу передал и сразу сделал дело. На основе первого варианта, возможно реализовать шину команд без всяких траблов. Во втором случае, если данные в метод execute будут передаваться разные, шину команд будет реализовать сложнее, возможно, но сложнее.