将数据模型映射到域模型的简便方法

时间:2017-10-31 17:42:39

标签: java android kotlin clean-architecture

我正在关注我们拥有3层(Clean ArchitecturePresentationDomain)的Data模式。

每个图层都应该有自己的模型,这些模型在使用映射器传递到另一个图层时应该进行转换。

我想知道是否有一种简单的方法(图书馆?)将data model映射到domain model而不创建mapper,特别是如果我的data model有很多领域(如40-50)。

修改

我已尝试过ModelMapperDozerMapper,但显然他们在Android上效果不佳(ModelMapper issueDozerMapper issue)。

提前致谢。

2 个答案:

答案 0 :(得分:3)

正如 Adam Vincent 所说,在干净的架构中,领域模型是核心,除此之外,每一层都应仅在必要时定义自己的模型。

我的日常工作涉及多个使用简洁架构的项目。我们通常发现自动映射工具没有提供太多价值。原因是,干净的架构从根本上消除了从域层到实现/内部结构层的依赖关系。自动映射器工具倾向于支持有限的转换,甚至强制您的持久层模型(例如 DTO)与域类型一对一匹配。这往往会限制域和持久层模型针对其不同职责进行定制的能力。

特别是,域类通常包含一组与相应持久层类略有不同的字段。我们更喜欢使用不可变类、构造函数和手动实现的映射逻辑等模式(前者大大简化了后者的维护)。这可确保明确并仔细考虑领域模型和持久性模型之间的转换。

答案 1 :(得分:0)

您正在寻找AutoMapper!有很多这些,大多数都被命名为AutoMapper。

这是Java的一个:http://modelmapper.org/

我不确定Kotlin,因为我还没有调查过,但我猜测如果一个JavaScript自动化库不兼容,那么在制作它之前不会很久。

最后辩论的想法:

我想澄清一下,除非必要,否则每个图层都应拥有自己的模型。我相信Clean Architecture,你的领域模型应该是goto。例如;如果您需要调整模型以便可以持久化(例如,在SQL数据库中),那么您需要一个DTO。另一方面,如果您的域模型可以序列化为JSON并持久存储到NoSQL数据库中,则无需复制模型。保持干爽!