我有以下解决方案结构。
Solution
ProductServiceApi
Business
DataAccess
DTO
Contract
我在DataAccess层中使用EntityFramework。它具有.edmx文件和实体类(例如Product)。我在DTO层(ProductDto)中有我的域类。我在WebApiConfig.cs文件中创建地图。要映射DTO和DataAccess图层实体,我必须在ProductServiceApi中添加对DTO图层和DataAccess图层的引用。
e.g. Mapper.CreateMap<ProductDto, Product>();
但我认为在我的ProductServiceApi中添加对dataAccess图层的引用是一个坏主意。
我应该怎么做才能避免这种情况?我应该在DTO图层中添加参考自动播放器并将dto和实体映射到那里吗?什么是理想的解决方案。我已经完成了一些在线教程,但找不到合适的解决方案。
答案 0 :(得分:0)
我已经为这个问题准备了一个很长的答案,但是当我重读它时,我突然明白我的答案只会误导你。所以这是一个较短的答案:)
但我认为在我的ProductServiceApi中添加对dataAccess图层的引用是一个坏主意。
如果我怀疑ProductServiceApi
是一个WebAPI项目,那么你不能真的(而且不应该)做任何事情来避免这种情况;在这种情况下它是有效地充当Automapper
的{{3}} *,并且为了它这样做,它必须引用所有这些东西 - 否则它不能为你构成对象映射
从设计的角度来看,这完全没问题,根本不是问题
;你可以“踢出罐头”并在单独的程序集中进行映射配置,但是ProductServiceApi
必须通过关联引用该程序集含义它仍然直接引用较低的程序集层。
因此,虽然有些内容我怀疑您当前的设计需要注意并且可以进一步讨论,但我不认为您对此特定问题中概述的方案存在问题:)
Contract
图层......这应该被拆分成多个图层,每个图层都包含一系列与系统某个部分相关的一组内容。但这些是另一个问题......
*(我知道组合根通常在 IoC 库的上下文中使用,但是在这种情况下,您正在组成类型之间的映射那种IoC所以我认为原理是相同的。)