As linhas podem ficar um pouco borradas, mas eu vejo assim:
-
Uma classe / interface de serviço fornece uma maneira de um cliente interagir com alguma funcionalidade no aplicativo. Isso é tipicamente público, com algum significado comercial. Por exemplo, uma interface
TicketingService
pode permitir que você usebuyTicket
,sellTicket
e assim por diante. -
Uma classe auxiliar tende a ser ocultada do cliente e é usada internamente para fornecer algum trabalho de placa de caldeira que não tenha significado de domínio de negócios. Por exemplo, digamos que você queira converter uma data em um registro de data e hora para salvá-lo em seu datastore específico. Você pode ter uma classe de utilitário chamada
DateConvertor
com um métodoconvertDateToTimestamp
que realiza esse processamento.
Os serviços não são simplesmente acoplados aos DAOs, é um termo / padrão de uso mais amplo que a persistência
Classes auxiliares não violam o SRP se codificadas de acordo com esse princípio. Ou seja, cada método deve fazer uma coisa e uma coisa bem, a classe deve executar um tipo de ajuda de utilidade (por exemplo, conversão de dados) e fazer isso bem.