假设我们有一个包含Spring 3.2.4,Hibernate 3.6.10等超过100个实体的大型Web项目.此项目中的大多数控制器都将基于REST,并将通过JavaScript调用. 虽然我认为在概念上简单地将实体直接编组/取消编组视图更容易,但事实证明,在使用Jackson时,这在实践中非常糟糕.虽然@JsonIgnore可用于避免无限复发,但有时候这种“一刀切”的注释并不适用于整个应用程序 – 我有时需要一把手术刀,并且很多时候可以查看一个对象在许多方面. 此外,尽管使用Hibernate模块为Jackson解决了使用Hibernate时的问题,但在使用Spring MVC测试框架时仍然会遇到一些javaassist延迟初始化问题. 通过简单地使用ViewModels或DTO可以避免所有上述问题,因此这是我倾向于的方向.不幸的是,创建和维护100多个DTO以及映射到和来的代码是一项相当大的投资. 我也猜测我将不得不为每个DTO编写自定义JsonDeserializer类,这也是相当多的编码和测试. 最后,我不确定这是否明智,但我怀疑我的验证规则将从我的实体移到我的视图模型上.我可能永远不会真正需要验证我的实际实体,但这种方法让我感到紧张. 有人可以强调一下在这样一个项目中实施和映射DTO的一些最佳实践,并且还提供一些有关处理Deserializion的最佳方法的见解吗?我正在寻找能够轻松维护代码的实践,并且希望不会耗费大量手动,耗时的工作. Martin Fowler的汇编方法对我来说有点多.谢谢! 解决方法: 通常,至少在较大的应用程序中是我的经验,我们在屏幕上显示的内容与实际的业务组件不同(模型方面).你基本上想要的是一个不同的阅读和写作领域(CQRS可能是一种方式).
过去对我有用的是,为那些不同的屏幕/模型创建数据库视图,并在这些视图上简单地实现另一个hibernate实体(只读).确保您可以将原始业务实体与您要调用的实际业务逻辑相关联. 如果这也有点多,你可能想看看Dozer,它可以帮助你映射/到对象.这样您就可以在Java中维护转换逻辑,而不必自己编写所有映射逻辑(您仍需要配置它,但这可能不那么痛苦). 链接 来源:https://www./content-1-279801.html |
|