Am I correct in thinking that the purpose of a service layer includes the following?
- thinning out of domain models (i.e. movement of certain functions like in caching, instantiation)
- reduction in dependencies from domain models
- API minimisation
Am I correct in thinking that the purpose of a service layer includes the following?
In terms of domain-driven design for example the domain service layer is used for operations that cannot be defined in the context of you Domain objects. For example if you have an object CreditCard, a suitable operation in your service layer would be Issue a new Credit Card.
In bigger application is used the pattern Anemic Domain Models, where the domain objects are used only as data containers and the whole business logic is in your domain service layer (this is sometimes refered as anti-pattern, but may be very useful in big solution, with adding another abstraction layer).
In difference solution architectures and patterns, service layer may have difference purpose, though.
Traditionally (when not using Domain Driven Design) the service layer, or 'business layer' as it is also called, is where you code all the business logic for your application. So, for example in an application that deals with giving out bank loans, the service layer is where the code goes that decides wether or not a certain loan should be given. Obviously, the service layer would would require some information about the applicant of the loan to be able to make a decision on her credibility. To retrieve this information, the business layer calls the 'data' or 'repository' layer, which deals with extracting and storing information into the database.
The service layer does not deal with matters like persistence or other infrastructural concerns.
If your design is domain-driven, anthares' answer is true.
Ummmmmmm, if it is service INTERFACE layer it is about separate the business logic from the communication layer. In the SIL you would have all the transforming messages stuff. That way you can evolutionate the model without changing the messaging: for example, you can add properties to an entity but without sendint it because you transform the entity into a DTO in the SIL.
Service Layer as the name suggests provides services that are not directly responsibility of any other domain object.
Service Layer also helps in decoupling of responsibilities. Service Layer forms the middle part between Database/persistence layer and the Client/UI/Web layer.
Properly designing the Service Layer allows it to be used from any client be it a Web Client or a Web Service (SOA) or Mobile device.