I'm working on an MVC application using C#/asp. The project is following an n-tier architecture style with a separate data layer, domain layer and presentation layer. My question is related to the use of models and entities in the different layers. Currently the project uses DTOs in the data layer and dapper to query the database, these get returned to the domain layer where they're mapped to more complex domain models, these are then returned to the presentation layer where they are mapped to view specific view models. Each layer has its own mapping classes to help keep separation of concerns.
Is having a different model/entity per layer the best practice here? I'm trying to improve my understand of what should and shouldn't be done when passing data between layers and I have tried to research this topic but I can't find a concrete answer as most examples show the entities in the Data layer being passed straight up to the presentation layer but that seems like tight coupling to me.
Thank you in advance for any help and I would be extremely appreciative of suggested books or blogs that would be beneficial to my understanding.