Purpose of the service layer

2020-05-17 09:22发布

问题:

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

回答1:

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.



回答2:

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 whether or not a certain loan should be given. Obviously, the service layer 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.



回答3:

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.