I would avoid annotating my domain objects with any persistence or non-domain. Thus, my domain project will not depend on another level, and I will not clutter it with things that are not related to the Domain. Although we need to bend the rules, I prefer to bend them so that they do not depend on the details of the preservation.
The goal is to keep the layers focused on their goal, because it is very easy to mix and create (over time) a large ball of dirt.
In your case, I have the feeling that you really do not have a rich domain or it is not correctly modeled. It seems you only have data structures, and your needs are CRUDY.
If you are sure that the application will not develop in order to become more complex, then it will be just manipulation of the data structure, then you can use one model for all purposes. Basically you can cut corners and use the “business” for everything. No need for abstractions and other things.
But if you think that the application will develop, or they will or will be business rules and processes, then you will need to model the behavior perceived by the business, then it is best to keep things very untied, even if at this stage they seem the same.
To make it easier, for your view model, you can define it (with a copy) and use automapper to map the business object to the view model. Another approach, it is possible that your request-service / repository / object can directly return to this view model (compare the result of the request with the view model)
source share