所以我们正在开发经典的多层应用程序,我们经常需要做的一件事就是在域实体,DTO,来自不同层的其他DTO等之间进行映射。
现在,我们正在手动执行此操作,实际上我很好。一些同事对此感到困扰,并希望有一些更自动的对象映射方式 - 比如Dozer,Apache BeanUtils等。我不喜欢的是使用这种方法意味着失去静态检查和重构 - 如果你改变属性名称您的域实体,应用程序将被破坏,但编译器不会警告您 - 您将在运行时崩溃。同事们争辩说,一旦你将单元测试涵盖了所有内容,这些错误就会被捕获。我不太确定这种情况总是如此。
但是,我想找到两全其美的解决方案 - 手动方法的安全性以及半自动映射的简便性和简洁性。
我想在应用程序启动期间会检查安全性 - 这个检查代码会找到所有具有已定义映射的实体,并检查所有映射属性是否在另一个类中具有相应的属性。
是否有任何映射库执行此操作?我找不到任何关于此的信息。我知道这可能很容易实现,但标准的现有解决方案将更好地使用它。谢谢!
答案 0 :(得分:2)
我会说Selma绝对是您正在寻找的工具。
此映射框架构建为Annotation Processor,因此它在编译时生成映射代码。您可以定义接口以指定映射合同。如果使用explainfull日志情况严重不好,Selma将引发编译失败。
它构建为重构证明,因为Selma在编译时生成代码,而且您将能够浏览映射源。
试一试并告诉我。
答案 1 :(得分:0)
MapStruct与Selma非常相似 - 它还使用注释处理器生成映射代码,应该是类型安全且可以重构的。