Richtlijnen
Hieronder een aantal richtlijnen voor Application Services.
Probeer zoveel mogelijk business regels in de aggregates in het domein model zelf te plaatsen (aggregates bestaan uit entiteiten en value objecten).
De service laag bevat alle code die nodig is om data te veranderen waarbij meerdere aggregates nodig zijn.
De service laag is hierbij verantwoordelijk voor het ophalen van de aggregates uit de repositories en het op de juiste manier aanroepen van de methoden van deze aggregates.
De service laag hoeft niet verantwoordelijk te zijn voor het ophalen van data uit verschillende repositories. Dergelijke queries kunnen ook in de repositories zelf worden gedefinieerd via een "JOIN" in een Custom Query (en dat is meestal efficiënter omdat deze direct op de database worden uitgevoerd).
In sommige bedrijven kom je de regel tegen dat de controller alleen met een (of meer) service(s) mag praten en NIET met repositories. Bijvoorbeeld in een code styleguide. Het voordeel hiervan is dat het een eenvoudige afspraak is die makkelijk te volgen is. Het nadeel is dat je dan de eenvoudige functionaliteit van een repository moet verplaatsen naar een service waarbij je geen extra functionaliteit toevoegt. Maar alleen een extra 'niveau van indirectie'. Daarnaast biedt Spring Boot tegenwoordig veel functionaliteit met annotaties die het gebruik van een service minder nodig en aantrekkelijk maken voor eenvoudige situaties.