传输对象组装器模式

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

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

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

问题

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

动因

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

解决方案

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

结构

让我们使用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>

后果

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

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

查看所有标签

猜你喜欢:

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

Making Things See

Making Things See

Greg Borenstein / Make / 2012-2-3 / USD 39.99

Welcome to the Vision Revolution. With Microsoft's Kinect leading the way, you can now use 3D computer vision technology to build digital 3D models of people and objects that you can manipulate with g......一起来看看 《Making Things See》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具