Java 如何建模和处理演示文稿DTO';如何从复杂的领域模型中抽象?
您好,我正在开发一个需要使用Hibernate处理复杂域模型的应用程序。该应用程序使用SpringMVC,在表示层中使用域对象非常混乱,因此我认为应该使用往返于服务层的DTO,以便这些DTO与我在视图中需要的匹配。现在让我们假设我有一个carlese实体,它的属性不是简单的java原语,而是由Make、Model等其他实体组成的Java 如何建模和处理演示文稿DTO';如何从复杂的领域模型中抽象?,java,architecture,spring-mvc,n-tier-architecture,Java,Architecture,Spring Mvc,N Tier Architecture,您好,我正在开发一个需要使用Hibernate处理复杂域模型的应用程序。该应用程序使用SpringMVC,在表示层中使用域对象非常混乱,因此我认为应该使用往返于服务层的DTO,以便这些DTO与我在视图中需要的匹配。现在让我们假设我有一个carlese实体,它的属性不是简单的java原语,而是由Make、Model等其他实体组成的 public class CarLease { private Make make; Private Model model;
public class CarLease {
private Make make;
Private Model model;
.
.
.
}
大多数属性都是这样的,它们可以使用jsp视图上的下拉选择进行选择,每个属性都会向控制器发回一个ID
现在考虑一些标准用例:创建、编辑、显示
您将如何对要用作表单支持对象以及表示层和服务层之间的通信的表示DTO进行建模
您会为每个案例(创建、编辑、显示)创建不同的DTO吗?您会为复杂属性创建DTO吗?如果是,您将在哪里将ID转换为实体
您将如何处理验证、DTO/域组装以及从服务层方法返回什么?(创建、编辑、获取)
如你所见,我现在将受益于将我的视图与域对象分离(非常复杂,有很多我不需要的东西)。但是我很难找到任何现实世界中的例子和最佳实践。我需要一些自上而下的架构指导,请记住我将使用SpringMVC,以防可能会利用您的anwser
提前感谢。我已经定义了一系列类型(DTO),用于在业务层和数据层之间交换数据;每个域对象/实体有不止一种类型。这些被定义为简单类
其中每一项都是根据特定的任务构建的,例如:
- 我有一个轻量级的类型,用于填充列表视图(有很多“行”,但没有很多“列”)。我还有一个对应的集合类型,它可以容纳任意数量的这些集合
- 我有一个“大”get副本,它通常具有所讨论的实体的所有属性——但只有一个实例。根据实体的大小和复杂程度以及使用情况,我可能会有不止一个;并且还取决于您是希望立即返回与实体实例关联的所有数据,还是在以后的请求中延迟加载一些数据
- 我通常对实体有单独的“保存”(new)和“更新”类型
我发回的大多数DTO集合(从DAL到BL)都是特定于一个概念的,而不是通用的。我通过我提供的构造函数来执行这些非常基本的规则:每个arg都是必需的。我不确定这是否回答了您的问题“如何管理组装和验证”。服务层应该返回DTO而不是EJB对象的想法主要是EJB3/JPA时代之前的想法。在CRUD期间,直接使用模型对象(又称实体)确实可以获得很多好处 但是,当用于性能优化时,您可以从使用DTO中获益,例如,当模型对象太大时,或者当您使用一些智能连接来聚合模型数据时 所以,除非你是美国工程师