传输对象组装器模式

栏目: 编程工具 · 发布时间: 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>

后果

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

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

查看所有标签

猜你喜欢:

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

软件预构艺术(中文版)

软件预构艺术(中文版)

Ken Pugh / O'Reilly Taiwan公司 / 东南大学 / 2010-6 / 26.00元

利用经验累积而得到的洞察力开发新的解决方案被称为预构。透过重构而获得的专业知识也属于这类经验,而预构的词源即重构。重构是修改程序或软件系统内部结构的实践,以此在保留其现有行为的基础上改良设计。重构的原因有多种:方便后期增加功能、提高可维护性、提升性能。 本书作者是经验老道的软件开发人员。书中,作者运用他个人和其他众多开发人员的丰富经验,展示由其推衍而得的各项实践方针。这些方针把优秀的开发人员......一起来看看 《软件预构艺术(中文版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具