Controller-Facade-Service architecture in a Restful Spring Boot web application

Viewed 419

I'm developing a set of microservices for a web application with Spring Boot, and I'm unsure if the pattern design I'm using is correct, or makes sense, or has any advantages.

What I'm using is a controller-facade-service design, which in my mind should work in this way:

  • The controller delegates everything to the facade, passing the input DTO to it
  • The facade implements all the business logic and uses one or more services to create an output DTO to send back to the controller
  • Services implement core and atomic functionalities, mostly CRUDs, without any or minimal business logic so that different facades with different business logic can use them, and return a JPA entity to the facade

Is this a good design pattern? Is the facade unnecessary?

More specifically, should the business logic be in the facade or in the service? I believe services should be logic agnostic so that they can be shared across multiple facades, which may implement different logic depending on the endpoint.

Also, in the case of a CRUD operation, should the service return an entity to the facade? Or should it be up to the service to create an output DTO for the facade?

0 Answers
Related