Search code examples
wcfdomain-driven-designdtotranslate

Where to place DTO <==> Entity translator in WCF service?


I have the following design : My Design My Design http://s15.postimg.org/3zha8rzqh/Design_Idea.png

I will have a class called 'ProductDTO' in my service layer (the left service).

When the 'Update Product ( ProductDTO )' operation contract is called - it should call the 'Update Product' function in the Business Logic Layer.

In the database (the 'Data Access Layer') there is an entity called 'Product', and because I use LINQ-To-Entities I will also have a class there called 'Product'.

My question is - where do I translate from 'ProductDTO' to 'Product' ?

Should I have a 'Translate_ProductDTO_To_Product' function in the service layer ? It seems the most logic answer, because that is the only layer that knows what 'ProductDTO' is.

But this means that the service layer will also have to know what 'Product' is, and thus will have to reference the data access layer assemblies.

Is this correct ?

I thought that the service layer should only reference the business logic layer, and that the business logic layer should only reference the data access layer, and that the service layer should know nothing about the DAL.


Solution

  • Map the DTO to your domain entities in your service layer. Your service layer needs to know about DTOs and the entities it is mapping to (and from). I strongly advise you use a tool like AutoMapper to do the mapping rather than hand-crafting. Your service layer should not reference your DA layer (or assembly). Your BL later will need to reference your DA layer to persist the entities. Edit: Your business entites probably should not be under a DA namespace. If you are using an ORM tool to generate them, make sure you put any DDD logic in the other half of a partial class.