Fowler's text on bounded contexts more or less describes your problem and the challenges associated with it.
Sometimes it's a matter of choosing one approach and following it consistently.
A microservices approach is orthogonal to a layer based approach. You will need all the layers pertaining to one set of problems in one unit of code.
Later in your ...
In my opinion, it is the Data Access Layer which is responsible for checking and returning the result to the upper business logic layer. One might argue that not allowing duplicate user is a business decision and should be checked in business layer. But the point is,
There is a difference between detection responsibilities and decision responsibilities.
However, what bothers me is the amount of work required to make a small change in a model,
In other words, it gets unmaintainable. Don't get me wrong, I'm not saying you are doing it wrong, in fact I think you are doing it correctly, and in the process you uncovered a real problem, and that is, that this architecture just a bad idea to begin with.
It gets ...
Keeping things clean requires effort.
Separating concerns has a lot of positive effects, like you mentioned. Mixing concerns on the other hand (like database with domain) introduces technical complexity. As software developers we should be focusing on business complexity. For me that means additional effort should result in reduced technical complexity. ...
Your layer is indeed not a classical GoF since it orchestrates requests in the subsystem and aggregates responses. It is not either a remote facade.
This kind of layer is called Service layer in Martin Fowler's view of application architecture, especially if it is meant to encapsulate the domain model.
In the microservice architecture, your component ...
I think that it depends on which one is important for you.
I had written unit tests in 2 different projects in that I had worked for a company.
Pros of mocking
The Unit Tests run fast according to saving really data to DB.
You do not have to maintain an extra database. Because if you are going to save data in reality, you have to create test a DB.
Both options are valid and have advantages and disadvantages:
Option 2 is correct from "idiomatic" point of view because "unit" tests shouldn't depend on code outside of the unit (class, layer, etc).
Option 1 leads to creating "integration" tests and as you stated, that's closer to the production usage and verifies that the different layers work together ...