分布模式

  • Remote Facade远程外观
    •  
    • 在OO模型中,存在很多规模小,且有小方法的对象.这些小对象会导致很多的对象间交互.
    • 在单一地址空间里,小对象没问题.
    • 但是,当在两个进程间做调用时,频繁的跨进程交互会造成性能开销.
    • 远程外观,减少远程调用的次数.
      • 建立在大量的细粒度对象之上,提供一个粗粒度的外观.
      • 不包括任何的领域逻辑.只是将方法转换到细粒度对象上.
    • 运行机制
      • 细粒度对象适合于解释复杂的逻辑.
      • 远程外观使用bluck accessor来使用一个getter/setter来完成在细粒度对象中的所有gettter/setter.
      • 单个远程外观,也可以作为多个细粒度对象的一个远程入口.
      • 远程外观的设计基于特定的客户需求.
        • 外观的设计是为了简化外观用户的使用,而不是为了简化内部系统.
        • 所以,远程对象中的大量不同方法实际上都在底层对象上调用了相同的方法.
      • 状态
        • 无状态.可以组成池,来提高资源的利用率和效率.
        • 有状态.当访问的客户很多时,可能会出现效率问题.
    • 使用时机
      • 需要远程访问细粒度对象模型时.
      • 最常用在表现和领域模型之间.通常它们处于不同的进程中.
      • 如果所有的交互都在单一的进程中,那么不需要这样的转变.
  • Data Transfer Object
    • 一个为了减少方法调用次数而在进程间传输数据的对象.
      • 当使用远程接口时,如果正在使用远程外观,每一次调用的代价会很大.
      • 需要减少调用的次数,就意味着每次调用都需要传递大量数据.
      • 解决的办法是使用数据传输对象.该对象将保留调用所用到的数据.
      • 它需要被序列化以便能在链接中传输.
    • 运行机制
      • DTO一般只是一堆域和getter/setter.
        • 价值在于允许一次调用中传输几部分信息.该特性是分布式的本质.
        • 一般会包含多个服务器对象,根据远端对象的需要.
        • 常见形式是记录集,或者集合数据结构.
      • 当远端对象需要某些数据时,它将询问一个合适的DTO
        • 通常,DTO会包含远多于远端对象所需要的数据量.
        • 这是因为远程调用的开销.宁可一次调用多传输以备以后使用.
      • 不想在Client端看到领域对象类.
        • 这样就等于在Client端拷贝整个领域模型.
        • 所以,应该从领域对象中传递一些简单格式的数据.
      • DTO中的域都是简单的原生类型,或者是其它的DTO.
        • DTO之间的结构应该只是简单的分层结构.
        • 目的是更简单的进行序列化.
        • 并且使传输的双方更容易理解.DTO必须被传输的双方知道.
      • DTO是围绕特定的Client端而设计的.
        • WEB和GUI会关联不同的DTO.
      • DTO的数目
        • 使用单一的DTO来处理整个交互.减少编码量,难以理解传输数据.
        • 用不同的DTO来处理不同的请求.清晰,但是会产生大量的DTO.
      • 请求双方
        • 请求方和发送方各自一个DTO,还是公用一个DTO.
      • 可变/恒定的DTO
        • 恒定的DTO,从Client端收到一个DTO后,新创建并回传一个不同的DTO.
        • 可变的,直接修改请求的DTO.逐步放入数据的方式.
      • 组装器
        • 独立了领域对象和DTO.使两者不相互依赖.
        • 映射器模式的实例:组装器
          • 负责从领域模型组装一个DTO.或者依据DTO更新领域模型.
        • 同时可以有多个组装器对象共享一个DTO.
          • 相同的数据在不同场景下有不同的更新语义.
    • 使用时机
      • 在一个方法调用中,在两个进程之间传输多个数据项,应使用它.
      • DTO可以作为不同软件层次间通用的数据源.
        • 每个层次对DTO做修改,然后将它传递到下一层.

 

转载于:https://www.cnblogs.com/robyn/p/3527038.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle分区表带入SQL语句,Oracle 分区表常用SQL语句 (转载)

*********为分区表建立一个单独的表空间*********/create tablespace ts_partition datafile /home/oracle/oradata/esales/partition.dbf size 10Mextent management local uniform size 2M;/*********建立分区表*********/create table bigtable(sale_date date,product_id n…

QT中PRO文件写法的详细介绍

在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下: 1. 注释 从“#”开始,到这一行结束。 2.模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择&am…

POJ 2485 Highways(最小生成树 Prim)

Highways大意:给你一个用邻接矩阵形式存储的有n个顶点的无向图,让你求它的最小生成树并求出在这个生成树里面最大的边的权值。 思路:用Prim求,判断条件改一下就行。 PS:dis数组初始化的时候用memset一直RE,…

oracle10g rac启动,ORACLE 10G RAC启动与关闭

rootnode-rac1 ~]# su - oracle关闭node-rac1[oraclenode-rac1 ~]$ cd /app/crs/product/10201/crs/bin/[oraclenode-rac1 bin]$ ./srvctl stop instance -d racdb -i racdb1[oraclenode-rac1 bin]$ ./srvctl stop asm -n node-rac1[oraclenode-rac1 bin]$ ./srvctl stop nodea…

iwconfig的用法(转)

1. 打开无线网卡电源iwconfig wlan0 txpower on2. 列出区域内的无线网络iwlist wlan0 scan3. 假设要连接到网络MyHome(即essid为MyHome的网络),那么输入命令iwconfig wlan0 essid “MyHome” 如果网络是加密的,密码是0123456789&a…

oracle用户获取datameta权限,Oracle数据库提权(低权限提升至dba)

0x01 Oracle存储过程”缺陷”在 Oracle 的存储过程中,有一个有趣的特点:运行权限。运行权限分为两种,definer 和 invoker。definer 为函数创建者的权限,而 invoker 则是当前调用函数的用户。运行权限在函数创建时就已经被钦定了&a…

__thread 和 __typeof__关键字

__thread:在多线程变成中,使用于global变量,使每个线程都私有一份。static __thread int count;void *function1(void *argc){printf("porgran pid:%u, the function1 pthread id is %lu, count:%d\n",getpid(), pthread_self(), count);count…

RSA openssl_public_encrypt false

这个问题困扰了我好久,最后发现,原来这个函数只能最大长度为117个字节。如果加密的串超过这个长度,就会返回false。转载于:https://www.cnblogs.com/gpfeisoft/p/3533479.html

linux将文件下载到本地windows,XSHELL下直接下载文件到本地(Windows)

xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz首先你的Ubuntu需要安装rz.sz(如果没有安装请执行以下命令,安装完的请跳过.其它版本linux请自行安装相应软件)yum install lrzsz安装完毕即可使用rz,sz是便是Linux/Uni…

C++11 标准新特性: 右值引用与转移语义

原文地址 http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ C 的新标准 C11 已经发布一段时间了。本文介绍了新标准中的一个特性,右值引用和转移语义。这个特性能够使代码更加简洁高效。 新特性的目的 右值引用 (Rvalue Referene) 是 C 新标准 (…

android远程linux命令,测试可用的Android远程语音识别实例

测试可用的Android远程语音识别实例:代码下载在:相关文件下载在Linux公社的1号FTP服务器里,下载地址:用户名:www.linuxidc.com密码:www.muu.cc在 2011年LinuxIDC.com\10月\10月\测试可用的Android远程语音识别实例pack…

C++11 标准新特性: 右值引用与转移语义(点评)

<<C11 标准新特性: 右值引用与转移语义>> 原文地址如下 http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 对MyString那个例子来说。 我写了三个测试用例。 1. MyString a; a MyString("Hello"); …

[原创]传递UIScrollView的滑动事件到其子视图中

在开发项目时&#xff0c;遇到了一个问题&#xff1a; 我的UIScrollViewOut中嵌入了一个UIScrollViewIn, 当我想要拖动UIScrollViewIn时,UIScrollViewOut却动了&#xff0c;而UIScrollViewIn没有动。但是只要按住UIScrollViewIn一会再拖动&#xff0c;UIScrollViewIn就可以滑动…

linux内核设计与实现 怎么读,《Linux内核设计与实现》读书笔记(一)

第一次写读书笔记&#xff0c;有什么套路呢&#xff1f;还没来得及去学习。《linux kernel的设计与实现》真的是一本好书&#xff0c;里面的东西解答了很多工作中的疑问。如显示地调用schedule()进行调度&#xff0c;系统调用__syscalln()&#xff0c;一些数据结构函数经常在ke…

C++中正确使用PRId64

nt64_t用来表示64位整数&#xff0c;在32位系统中是long long int&#xff0c;在64位系统中是long int&#xff0c;所以打印int64_t的格式化方法是&#xff1a; [cpp] view plaincopy printf("%ld", value); // 64bit OS printf("%lld", value); // 32bi…

大话细说ORM -----(转)

什么是ORM&#xff1f; ORM&#xff0c;即对象关系映射(Object Relational Mapping)表示一种技术&#xff0c;用来把&#xff08;对象模型&#xff09;表示的对象映射到基于SQL的&#xff08;关系模型&#xff09;数据结构中去。 说得通俗点&#xff0c;就是在对象的属性与关系…

linux中权限的名词解释,Linux的基本权限和特殊权限

基本权限的类别访问方式(权限)&#xff1a;-读写&#xff1a;允许查看内容-read r-写入&#xff1a;允许修改内容-write w-可执行&#xff1a;允许运行和切换-execute x对于文本文件&#xff1a;r&#xff1a;cat head tail lessw&#xff1a;vimx&#xff1a…

乱写

想写点东西&#xff0c;又不知道从何下笔。可是心情又觉得有些许不爽&#xff0c;那就漫无思绪想到哪写哪吧。 昨天加了一个HR的QQ&#xff0c;发了一封简历过去&#xff0c;她说她打开我的简历电脑就蓝屏了&#xff08;无语&#xff09;&#xff0c;这管不着我简历的事吧。然后…

容器set和multiset

一、set和multiset基础 set和multiset会根据特定的排序准则&#xff0c;自动将元素进行排序。不同的是后者允许元素重复而前者不允许。 需要包含头文件&#xff1a; #include <set> set和multiset都是定义在std空间里的类模板&#xff1a; [cpp] view plaincopyprint? t…

linux centos命令语法,linux-centos7

# :-: linux常用的相关查询命令### **1.查看linux用户命令**cat /etc/passwd### **2.查看cpu,mem**grep "model name" /proc/cpuinfo 查看cpu核数cat /proc/cpuinfo 查看cpu详细信息grep MemTotal /proc/meminfo 查看内存总大小以及剩余大小…