我正在关注我们拥有3层(Clean Architecture
,Presentation
,Domain
)的Data
模式。
每个图层都应该有自己的模型,这些模型在使用映射器传递到另一个图层时应该进行转换。
我想知道是否有一种简单的方法(图书馆?)将data model
映射到domain model
而不创建mapper
,特别是如果我的data model
有很多领域(如40-50)。
修改
我已尝试过ModelMapper和DozerMapper,但显然他们在Android上效果不佳(ModelMapper issue和DozerMapper issue)。
提前致谢。
答案 0 :(得分:3)
正如 Adam Vincent 所说,在干净的架构中,领域模型是核心,除此之外,每一层都应仅在必要时定义自己的模型。
我的日常工作涉及多个使用简洁架构的项目。我们通常发现自动映射工具没有提供太多价值。原因是,干净的架构从根本上消除了从域层到实现/内部结构层的依赖关系。自动映射器工具倾向于支持有限的转换,甚至强制您的持久层模型(例如 DTO)与域类型一对一匹配。这往往会限制域和持久层模型针对其不同职责进行定制的能力。
特别是,域类通常包含一组与相应持久层类略有不同的字段。我们更喜欢使用不可变类、构造函数和手动实现的映射逻辑等模式(前者大大简化了后者的维护)。这可确保明确并仔细考虑领域模型和持久性模型之间的转换。
答案 1 :(得分:0)
您正在寻找AutoMapper!有很多这些,大多数都被命名为AutoMapper。
这是Java的一个:http://modelmapper.org/
我不确定Kotlin,因为我还没有调查过,但我猜测如果一个JavaScript自动化库不兼容,那么在制作它之前不会很久。
最后辩论的想法:
我想澄清一下,除非必要,否则每个图层都应不拥有自己的模型。我相信Clean Architecture,你的领域模型应该是goto。例如;如果您需要调整模型以便可以持久化(例如,在SQL数据库中),那么您需要一个DTO。另一方面,如果您的域模型可以序列化为JSON并持久存储到NoSQL数据库中,则无需复制模型。保持干爽!