我正在查看我刚刚带来的项目的一些C#WebAPI代码,并注意到数据访问的一般模式是这样的:
所以我在这里关注一些事情。首先,不应该使用像AutoMapper这样的东西来处理这个问题,这样每个特定的存储库都不会充斥着从一个(或几个)实体到一个DTO的这些相当大的投影?
同样,请记住大部分时间,它不是一个实体(即User - > UserDto),而是几个实体映射到一个拼合的DTO。因此,例如Class1,Class2,Class3,Class4都映射到AggregatedClassDto。是否应该在存储库层完成,如果是这样,在这种情况下Automapper是否合适?
如果我将映射逻辑移出其他地方,我认为这一切都将是自定义的(从属性/字段角度来看,几乎没有任何内容可以转换为1-1)。这不只是将所有代码移动到许多自定义转换器或什么?
最后,还有其他任何关注领域?
谢谢!
答案 0 :(得分:2)
AutoMapper当然可以处理
using AutoMapper.QueryableExtensions
。
即使您的类和属性不是一对一映射,也可以定义非常复杂的映射。您可以在AutoMapper Wiki上详细了解queryable extensions
。
就在存储库中完成映射而言,从single-responsibility
的角度来看,您可能不应该在存储库中执行映射并返回实体。
答案 1 :(得分:0)
我将此作为单独的答案添加,因为我不完全同意第一个答案。
我同意不应在存储库内部进行映射,但我不同意所有映射都应由AutoMapper
完成,因为DTO
和object
之间存在概念差异DTO
,因为DTOs
是一个数据传输对象,严格来说并不总是由您创建,因此不应该被信任。根据我的经验,最好手动将POCOs
转换为window.onbeforeunload = function(){return "aaa";}
而不是自动转换它们(另一种方式,确定,继续)。 This blog-post quite well describes my opinion on the matter.