DTO映射器即服务

时间:2013-12-20 17:54:36

标签: asp.net-mvc service automapper

我正在开发一个使用自动映射器作为将域对象转换为View模型的方法的项目。

它目前位于IMapperService的后面。此服务的当前实现将调用转发到自动映射器(相同的方法签名)。

据我所知,如果使用不同的映射库,则可以轻松换出。

但是我认为映射需要在应用程序的其他调整中重写。

我认为自动映射器实现不太可能在项目中途进行交换。

我想删除对此服务的依赖,并将我的控制器紧密耦合(从未想过我会这么说)自动映射器,因为我认为映射逻辑无论如何都与自动映射器绑定。

有没有人曾将自动映射器地图调用抽象为服务,如果是的话;你有没有在项目中途或项目结束时交换映射器?

将自动映射器调用抽象为服务似乎有点过分吗?

2 个答案:

答案 0 :(得分:1)

在我们的控制器/服务中,映射通常是对AutoMapper Map的单个调用。如果我们想要一个不同的映射引擎,这将使得更改变得简单。更具挑战性的变化将是映射本身。

至于矫枉过正;我相信它是。如果您预计映射引擎很可能会发生变化,那么抽象映射引擎。否则不要这样做,因为它需要维护更多的代码,更多可能出错的东西以及需要理解的更多代码。首字母缩写YAGNI浮现在脑海中。

答案 1 :(得分:1)

我使用你在使用AutoMapper时提到的方法,我更喜欢尽可能编程到接口。调用代码(控制器/服务)应该只关心'what'(X映射到Y)而不是'how'(AutoMapper将X映射到Y)。

如果您可以将AutoMapper换成其他东西的可能性很低而且您不想引入自定义服务,那么您可以查看注入IMappingEngine。这节省了对静态Mapper.Map函数的调用,并且可以很容易地进行模拟以用于测试目的。