传输对象组装器模式

栏目: 编程工具 · 发布时间: 5年前

内容简介:使用传输对象组装程序将应用程序模型构建为复合传输对象。传输对象组装器聚合来自各种业务组件和服务的多个传输对象,并将其返回给客户端。您希望获得一个聚合来自多个业务组件的传输对象的应用程序模型。

使用传输对象组装程序将应用程序模型构建为复合传输对象。传输对象组装器聚合来自各种业务组件和服务的多个传输对象,并将其返回给客户端。

问题

您希望获得一个聚合来自多个业务组件的传输对象的应用程序模型。

动因

  • 您希望以集中方式封装业务逻辑,并防止在客户端中实现它。
  • 您希望在构建业务层对象模型的数据表示时,对远程对象的网络调用最小化。
  • 您希望创建一个复杂的模型以交给客户端以进行演示。
  • 您希望客户端独立于模型实现的复杂性,并且希望减少客户端与业务组件之间的耦合。

解决方案

使用传输对象组装程序将应用程序模型构建为复合传输对象。传输对象组装器聚合来自各种业务组件和服务的多个传输对象,并将其返回给客户端。

结构

让我们使用UML类图来显示解决方案的基本结构,本节中的UML序列图介绍了解决方案的动态机制。

类图

传输对象组装器模式

序列图

传输对象组装器模式

参与者与职责

客户端 - 客户端调用TransferObjectAssembler以获取应用程序模型数据。客户端可以是表示层的组件,也可以是会话面,为访问TransferObjectAssembler的客户端提供远程访问层。

TransferObjectAssembler - TransferObjectAssembler是此模式的主要类。当客户端请求应用程序模型数据时,TransferObjectAssembler根据应用程序的要求构造一个新的复合传输对象。

ApplicationModel- ApplicationModel对象是由TransferObjectAssembler构造并返回到客户端的复合传输对象。

BusinessObject-  BusinessObject表示业务对象,它向TransferObjectAssembler提供传输对象以组装应用程序模型。

SessionFacade - 该SessionFacade表示会话外观,它提供了构建applicationmodel传输对象所需的部分数据。

DataAccessObject -  DataAccessObject表示数据访问对象,当TransferObjectAssembler需要直接从持久存储中获取数据时使用。

Service - 服务是任意服务对象,包括业务层中的应用程序服务,它提供构造ApplicationModel对象所需的数据。

实现传输对象汇编程序

考虑一个 项目管理应用程序 ,其中许多业务层组件定义了复杂模型。假设客户想要获取模型

数据来自于各种业务对象的数据组合,例如:

  • 项目组件的项目信息
  • ProjectManager组件中的 项目经理信息
  • 项目组件中 的项目任务列表
  • 资源组件中的资源信息。

第1步: 创建复合传输对象类

可以实现一个传输对象组装器模式来组装该复合传输对象。

<b>public</b> <b>class</b> ProjectDetailsData {
    <b>private</b> ProjectTO projectData;
    <b>private</b> ProjectManagerTO projectManagerData;
    <b>private</b> Collection < TaskResourceTO > listOfTasks;

    <b>public</b> ProjectDetailsData(ProjectTO projectData, ProjectManagerTO projectManagerData,
        Collection < TaskResourceTO > listOfTasks) {
        <b>super</b>();
        <b>this</b>.projectData = projectData;
        <b>this</b>.projectManagerData = projectManagerData;
        <b>this</b>.listOfTasks = listOfTasks;
    }
}

ProjectDetailsData中的任务列表是TaskResourceTo对象的集合。taskResourceTo是taskTo和resourceTo的组合。

第2步: 创建ResourceTo、TaskTo、ProjectTo和ProjectManager以传输对象类。

<b>public</b> <b>class</b> ResourceTO {
    <b>private</b> String resourceId;
    <b>private</b> String resourceName;
    <b>private</b> String resourceEmail;
    <b>public</b> String getResourceId() {
        <b>return</b> resourceId;
    }
    <b>public</b> <b>void</b> setResourceId(String resourceId) {
        <b>this</b>.resourceId = resourceId;
    }
    <b>public</b> String getResourceName() {
        <b>return</b> resourceName;
    }
    <b>public</b> <b>void</b> setResourceName(String resourceName) {
        <b>this</b>.resourceName = resourceName;
    }
    <b>public</b> String getResourceEmail() {
        <b>return</b> resourceEmail;
    }
    <b>public</b> <b>void</b> setResourceEmail(String resourceEmail) {
        <b>this</b>.resourceEmail = resourceEmail;
    }
}
<b>public</b> <b>class</b> TaskTO {
 <b>private</b> String projectId;
 <b>private</b> String taskId;
 <b>private</b> String name;
 <b>private</b> String description;
 <b>private</b> Date startDate;
 <b>private</b> Date endDate;
 <b>private</b> String assignedResourceId;
 <b>public</b> String getProjectId() {
  <b>return</b> projectId;
 }
 <b>public</b> <b>void</b> setProjectId(String projectId) {
  <b>this</b>.projectId = projectId;
 }
 <b>public</b> String getTaskId() {
  <b>return</b> taskId;
 }
 <b>public</b> <b>void</b> setTaskId(String taskId) {
  <b>this</b>.taskId = taskId;
 }
 <b>public</b> String getName() {
  <b>return</b> name;
 }
 <b>public</b> <b>void</b> setName(String name) {
  <b>this</b>.name = name;
 }
 <b>public</b> String getDescription() {
  <b>return</b> description;
 }
 <b>public</b> <b>void</b> setDescription(String description) {
  <b>this</b>.description = description;
 }
 <b>public</b> Date getStartDate() {
  <b>return</b> startDate;
 }
 <b>public</b> <b>void</b> setStartDate(Date startDate) {
  <b>this</b>.startDate = startDate;
 }
 <b>public</b> Date getEndDate() {
  <b>return</b> endDate;
 }
 <b>public</b> <b>void</b> setEndDate(Date endDate) {
  <b>this</b>.endDate = endDate;
 }
 <b>public</b> String getAssignedResourceId() {
  <b>return</b> assignedResourceId;
 }
 <b>public</b> <b>void</b> setAssignedResourceId(String assignedResourceId) {
  <b>this</b>.assignedResourceId = assignedResourceId;
 }
}
<b>public</b> <b>class</b> TaskResourceTO {
    <b>private</b> String projectId;
    <b>private</b> String taskId;
    <b>private</b> String name;
    <b>private</b> String description;
    <b>private</b> Date startDate;
    <b>private</b> Date endDate;
    <b>private</b> TaskResourceTO assignedResource;
    <b>public</b> String getProjectId() {
        <b>return</b> projectId;
    }
    <b>public</b> <b>void</b> setProjectId(String projectId) {
        <b>this</b>.projectId = projectId;
    }
    <b>public</b> String getTaskId() {
        <b>return</b> taskId;
    }
    <b>public</b> <b>void</b> setTaskId(String taskId) {
        <b>this</b>.taskId = taskId;
    }
    <b>public</b> String getName() {
        <b>return</b> name;
    }
    <b>public</b> <b>void</b> setName(String name) {
        <b>this</b>.name = name;
    }
    <b>public</b> String getDescription() {
        <b>return</b> description;
    }
    <b>public</b> <b>void</b> setDescription(String description) {
        <b>this</b>.description = description;
    }
    <b>public</b> Date getStartDate() {
        <b>return</b> startDate;
    }
    <b>public</b> <b>void</b> setStartDate(Date startDate) {
        <b>this</b>.startDate = startDate;
    }
    <b>public</b> Date getEndDate() {
        <b>return</b> endDate;
    }
    <b>public</b> <b>void</b> setEndDate(Date endDate) {
        <b>this</b>.endDate = endDate;
    }
    <b>public</b> TaskResourceTO getAssignedResource() {
        <b>return</b> assignedResource;
    }
    <b>public</b> <b>void</b> setAssignedResource(TaskResourceTO assignedResource) {
        <b>this</b>.assignedResource = assignedResource;
    }
}
<b>public</b> <b>class</b> ProjectManagerTO {

    <b>private</b> String name;
    <b>private</b> String address;
    <b>private</b> String projects;
    <b>public</b> String getName() {
        <b>return</b> name;
    }
    <b>public</b> <b>void</b> setName(String name) {
        <b>this</b>.name = name;
    }
    <b>public</b> String getAddress() {
        <b>return</b> address;
    }
    <b>public</b> <b>void</b> setAddress(String address) {
        <b>this</b>.address = address;
    }
    <b>public</b> String getProjects() {
        <b>return</b> projects;
    }
    <b>public</b> <b>void</b> setProjects(String projects) {
        <b>this</b>.projects = projects;
    }

}
<b>public</b> <b>class</b> ProjectTO {

    <b>private</b> String projectId;
    <b>private</b> String projectName;
    <b>private</b> String projectDesc;
    <b>public</b> String getProjectId() {
        <b>return</b> projectId;
    }
    <b>public</b> <b>void</b> setProjectId(String projectId) {
        <b>this</b>.projectId = projectId;
    }
    <b>public</b> String getProjectName() {
        <b>return</b> projectName;
    }
    <b>public</b> <b>void</b> setProjectName(String projectName) {
        <b>this</b>.projectName = projectName;
    }
    <b>public</b> String getProjectDesc() {
        <b>return</b> projectDesc;
    }
    <b>public</b> <b>void</b> setProjectDesc(String projectDesc) {
        <b>this</b>.projectDesc = projectDesc;
    }
}

第3步: 实现传输对象组装程序。

在此处组装ProjectDetailsData对象的ProjectDetailsAssembler类。

<b>public</b> <b>class</b> ProjectDetailsAssembler {

    <b>public</b> ProjectDetailsData getData(String projectId) {

        <font><i>// Construct the composite transfer object</i></font><font>
        </font><font><i>// get project related information from database and set to ProjectDetailsData class object.</i></font><font>
        ProjectTO projectData = <b>new</b> ProjectTO();

        </font><font><i>// get ProjectManager info and add to ProjectDetailsData</i></font><font>
        ProjectManagerTO projectManagerData = <b>new</b> ProjectManagerTO();

        </font><font><i>// construct a new TaskResourceTO using Task and Resource data.</i></font><font>
        </font><font><i>//get the Resource details from database.</i></font><font>
        </font><font><i>// construct a list of TaskResourceTOs</i></font><font>
        Collection < TaskResourceTO > listOfTasks = <b>new</b> ArrayList < > ();


        </font><font><i>// Add Project Info to ProjectDetailsData</i></font><font>
        </font><font><i>// Add ProjectManager info to ProjectDetailsData</i></font><font>
        ProjectDetailsData pData = <b>new</b> ProjectDetailsData(projectData, projectManagerData, listOfTasks);
        <b>return</b> pData;
    }
}
</font>

后果

  • 分离业务逻辑,简化客户端逻辑
  • 减少客户端和应用程序模型之间的耦合
  • 提高网络性能
  • 提高客户端性能
  • 可以引入过期的数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

维多利亚时代的互联网

维多利亚时代的互联网

[英] 汤姆·斯丹迪奇 / 多绥婷 / 后浪丨江西人民出版社 / 2017-8 / 38.00元

人类历史上的第一次大连接 回顾互联网的前世 预言互联网的未来 ……………… ※编辑推荐※ ☆《财富》杂志推荐的75本商务人士必读书之一 ☆ 回顾互联网的前世,颠覆你的思维,升级你对互联网的认知 ☆ 人类历史上一次全球大连接是维多利亚时期的电报时代,那时候也有疯狂的资本、 巨大的泡沫、网络新型犯罪、网络亚文化崛起……现在的互联网时代就是电报时代的重演;回顾那......一起来看看 《维多利亚时代的互联网》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具