2024年9月attributedto是什么意思(DTO是什么)

 更新时间:2024-09-21 07:04:40

  ⑴attributedto是什么意思(DTO是什么

  ⑵DataTransferObject(数据传输对象您正在设计一个分布式应用程序,为了满足单个客户端请求,您发现自己对一个远程接口发出了多个调用,而这些调用所增加的响应时间超出了可接受的程度。问题如何保留过程调用接口的简单语义,而不受远程通信固有的滞后时间问题的影响?影响因素在与远程对象通信时,请考虑下列需要权衡的因素:远程调用(那些必须跨越网络的调用速度缓慢。虽然许多远程调用框架可以隐藏进行远程调用的复杂性,但是它们不能消除发生通信所需的步骤。例如,必须先找到远程对象位置,而且建立与远程计算机的连接,然后才能将数据串行化为字节流,然后可能进行加密,最后才能将其传输到远程计算机。在考虑网络性能时,必须同时考虑滞后时间和吞吐量。简单地说,“滞后时间“描述了数据的首字节到达目的地之前所经过的时间。“吞吐量“描述了在某个时间段(例如秒内通过网络发送的数据字节数。在基于IP路由的现代网络(例如Inter中,滞后时间可以是比吞吐量更大的因素。这意味着,传输字节数据所用的时间可能几乎等于传输,字节数据所用的时间。在使用无连接协议(如HTTP时,此效果尤其明显。通常,网络速度越快可以使吞吐量得以增加,但是,要减少滞后时间则会更加困难。在设计对象接口时,好的做法是将大量信息隐藏在对象内,并提供一组细粒度方法来访问和操作该信息。“细粒度“意味着每个方法都应该负责单个的、相当小的和基本的功能单位。此方法简化了编程,并提供了对对象内部的更佳抽象,从而增加了重用的可能性。必须根据以下事实对此进行平衡取舍:使用较细粒度的方法意味着需要调用更多的方法才能执行高级别的任务。通常,在同一进程内调用方法时,这些额外函数调用的开销是可接受的;但是,在跨进程和网络边界调用这些方法时,开销可能变得难以接受。避免远程调用中固有的滞后时间问题的最佳方法是进行更少的调用,并让每个调用传递更多的数据。做到这一点的一种方法是,使用长参数列表来声明远程方法。这样,客户端就可以在单个调用中将更多的信息传递给远程组件。但是,这样做会使针对此接口的编程容易出错,因为程序很可能仅按调用语句中的位置来调用外部方法的参数。例如,如果远程方法接受个字符串参数,则开发人员很容易按错误顺序传递参数。编译器将无法检测到这样的错误。长参数列表无助于从远程调用向客户端返回更多的信息,因为大多数的编程语言将方法调用的返回类型限制为单个参数。而巧合的是,在传输大多数数据时通常需要返回较多信息。例如,许多用户接口传输少量的信息,却希望返回大量结果数据。解决方案创建一个数据传输对象(DTO),用该对象包含远程调用所需要的所有数据。修改远程方法签名,以便将DTO作为单个参数接受,并将单个DTO参数返回给客户端。在调用方应用程序收到DTO并将其作为本地对象存储之后,应用程序可以分别对DTO发出一系列单独的过程调用,而不会引发远程调用开销。MartinFowler在PatternsofEnterpriseApplicationArchitecture中对此模式进行了说明。下图显示客户端应用程序如何进行一系列远程调用以检索客户名称的各个元素。图:没有DTO的远程调用DTO允许远程对象在单个远程调用中将整个客户名称返回给客户端。在此示例中,这样做将使调用次数从次减为次。客户端进行单个调用,然后在本地与DTO交互,而不用进行多次远程调用(见图。图:通过使用DTO减少调用次数DTO是一组需要跨进程或网络边界传输的聚合数据的简单容器。它不应该包含业务逻辑,并将其行为限制为诸如内部一致性检查和基本验证之类的活动。注意,不要因实现这些方法而导致DTO依赖于任何新类。在设计数据传输对象时,您有两种主要选择:使用一般集合;或使用显式的getter和setter方法创建自定义对象。一般集合的优点是,只需要一个类,就可以在整个应用程序中满足任何数据传输目的。此外,集合类(例如,简单数组或散列图内置于几乎所有语言库中,因此您根本不必编写新类的代码。对DTO使用集合对象的主要缺点是,客户端必须按位置序号(在简单数组的情况下或元素名称(在键控集合的情况下访问集合内的字段。此外,集合存储的是同一类型(通常是最一般的Object类型的项目,这可以导致在编译时无法检测到的微妙但致命的编码错误。如果为每个DTO创建自定义类,则可以提供与任何其他对象完全一样的、客户端应用程序可访问的强类型对象,这样的对象可以提供编译时检查,并支持代码器功能(如Microsoft?IntelliSense?技术。主要缺点是,如果应用程序发出许多远程调用,则您最终可能必须编写大量类的代码。许多方法试图将这两种方法的优点结合在一起。第一种方法是代码生成技术,该技术可以生成脱离现有元数据(如可扩展标记语言(XML)架构的自定义DTO类的源代码。第二种方法是提供更强大的集合,尽管它是一般的集合,但它将关系和数据类型信息与原始数据存储在一起。MicrosoftADO.DataSet支持这两种方法(请参阅在.中使用DataSet实现DataTransferObject。有了DTO类以后,需要用数据填充它。大多数情况下,DTO内的数据来自多个域对象。因为DTO没有行为,因此它不能从域对象提取数据。这是对的,因为如果让DTO不知道域对象,您就可以在不同的上下文中重用DTO。同样,您不希望域对象知道DTO,因为这可能意味着更改DTO将要求更改域逻辑中的代码,这将导致大量维护任务。最佳的解决方案是使用Assembler模式中也提到过它。图:使用Assembler将数据加载到DTO中Assembler的关键特征是DTO和域对象不相互依赖。这就消除了这两种对象的相互影响。不利方面是Assembler同时依赖于DTO和域对象。对这些类的任何更改都可能导致必须更改Assembler类。示例请参阅在.中使用DataSet实现DataTransferObject。测试考虑事项DTO是简单对象,它不应该包含需要测试的任何业务逻辑。但是,您确实需要测试每个DTO的数据聚合。每个DTO可能需要测试,也可能不需要,这取决于您的序列化机制。如果序列化是框架的一部分,则只需要测试一个DTO。如果不是这样,请使用一般的反射机制,这样就不需要测试每个DTO的序列化。DTO还对远程函数的可测试性有好处。通过使远程方法的结果能够在对象实例中使用,可以轻松地将此数据传递到测试模块,或将其与所需结果进行比较。安全考虑事项理想情况下,应该先筛选和验证从不可靠的来源获得的数据(如来自Web页的用户输入,然后将其置于DTO中。通过这样做,就可以认为DTO中的数据是相对安全的,从而简化了将来与DTO的交互。接收DTO的进程和关联用户的安全凭据也是值得注意的。DTO通常包含从许多不同来源聚集在一起的大量信息。您是否已授权DTO的所有用户访问DTO所包含的所有信息?确保用户已得到授权的最佳方法是仅使用用户安全凭据所允许的特定数据填充DTO。努力避免让DTO负责自己的安全性。这将增加DTO对其他类的依赖数,这意味着必须将这些类部署到使用DTO的所有节点。这还会将安全性功能分散到更多类中,从而增大了安全风险,并对灵活性和可维护性产生负面影响。结果上下文DataTransferObject具有下列优缺点:优点减少了远程调用次数。通过在单个远程调用中传输更多的数据,应用程序可以减少远程调用次数。提高了性能。远程调用可以使应用程序的运行速度大大降低。减少调用次数是提高性能的最佳方法之一。在大多数方案中,传输大量数据的远程调用所用的时间与仅传输少量数据的调用所用的时间几乎相等。隐藏内部情况。在单个调用中来回传递更多的数据,还可以更有效地将远程应用程序的内部情况隐藏在粗粒度接口的背后。这就是使用RemoteFacade模式的主要原因。发现业务对象。在一些情况下,定义DTO有助于发现有意义的业务对象。在创建用作DTO的自定义类时,您通常会注意到作为一组凝聚性信息而显示给用户或另一个系统的元素分组。通常,这些分组用作描述应用程序所处理的业务域的对象的有用原型。可测试性。将所有参数封装到可序列化对象中可以提高可测试性。例如,可以从XML文件中读取DTO,并调用远程函数以测试它们。同样,可以轻松地将结果再序列化为XML格式,并将XML文档与所需结果进行比较,而不必创建冗长的比较脚本。缺点可能需要太多的类。如果选择了使用强类型的DTO,则可能必须为每个远程方法创建一个(如果考虑返回值,则为两个DTO。即使在粗粒度接口中,这也可能导致大量的类。编写如此数量的类的代码并管理这些类会是很困难的。使用自动代码生成可以在一定程度上缓解此问题。增加计算量。如果将服务器上的一种数据格式转换为可以跨网络传输的字节流,并在客户端应用程序内转换回对象格式,可以带来相当大的开销。通常,需要将来自多个源的数据聚合到服务器上的单个DTO中。要提高通过网络进行远程调用的效率,必须在任一端执行其他计算,才能聚合和串行化信息。增加编码工作量。可以用一行代码完成将参数传递到方法的操作。使用DTO要求实例化新对象,并为每个参数调用setters和getters。编写此代码可能是很乏味的。

  ⑶数据传输对象(DTO(DataTransferObject),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器。

  ⑷数据就是数值,也就是我们通过观察、实验或计算得出的结果。数据有很多种,最简单的就是数字。数据也可以是文字、图像、声音等。数据可以用于科学研究、设计、查证、数学等。指进行各种统计、计算、科学研究或技术设计等所依托的数值。柯岩?《奇异的书简·船长》:“?贝汉廷分析着各个不同的数据,寻找着规律,终于抓住了矛盾的牛鼻子。

  ⑸EJB中科永联高级技术培训中心((EnterpriseJavaBean)是JEE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。在JEE里,EnterpriseJavaBeans(EJB)称为Java企业柄,是Java的核心代码,分为整体柄和片段柄和消息柄三个部分,其中的消息柄将在以后再作讨论。现在我们来看看什么是整体柄和片段柄。整体柄是一种对象:标准Java对象由创建它的程序创建,当程序终止时,对象也随之丢失,这就意味着当再次运行些程序时,将无法找到先前创建的柄,而整体柄会一直存在着直到它被删除。一个程序可以创建一个整体柄,并且这个程序可以在被保存后随时停止和重启。整体柄将会依然存在。重启后,程序可以找到与之相对应的整体柄,并且会继续使用这个整体柄。EJB实际上是SUN的JEE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理...一.什么是EJB?一个技术规范:EJB从技术上而言不是一种“产品“EJB是一种标准描述了构建应用组件要解决的:可扩展(Scalable)分布式(Distributed)事务处理(Transactional)数据存储(Persistent)安全性(Secure)二.Sun对EJB的期望提供一个标准的分布的、基于OO的组件架构屏蔽复杂的系统级功能需求Writeonce,runanywhere与非Java应用之间的互操作能力兼容CORBA标准三.为什么选择EJB?EJB服务器完成“繁杂“的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于GL语言设计的目标)支持事务处理多个业务操作同时成功,或全部失败可以通过在代码外的描述来定义事务处理级别可扩展性EJB可以根据您应用的增长而扩展EJB服务器往往还提供了负载均衡和安全性:由EJB服务器提供资源的访问权限控制四.EJB架构为了满足架构的目标,规范中描述了服务器(Server)容器(Container)类(Class)和实例(Instance)Home和Remote接口客户端(Client)五.简化的编程模型关注于业务逻辑实现:EJB负责生命周期(lifecycle),数据存储(persistence),事务处理语义(transactionalsemantic),安全(security),...通用的编程模型:各种服务的高层APIJava是其编程语言.EJB特点由一个EJB容器在运行时创建和管理EJB在部署EJB时定制其运行方式由EJB容器和服务器来协调客户端的访问可以部署到任何兼容的EJB容器中客户端对EJB的视图是由Bean开发人员决定的.EJB服务器管理EJB容器(它管理Bean)提供对操作系统服务的存取提供Java相关的服务,尤其是通过JNDI访问命名空间基于OTS的事务处理服务.EJB容器管理Bean生命周期:将EJB服务器提供的服务传递给Bean生成代码来实现对Bean的存取访问强制事务处理的限制创建、初始化和回收Bean管理持久数据的存储对客户端而言EJB容器是透明的.在一个EJB服务器中的容器目前容器通常是由EJB服务器本身提供的在EJB.或.规范中没有定义容器-到-服务器的接口各厂商可以根据他们的见解来实现服务器和容器的各自责任.容器提供服务:数据存储容器决定何时载入/储存状态Container-ManagedPersistence(容器管理存储/CMP)容器负责存储您的Bean容器生成必要的类和代码Bean-ManagedPersistence(Bean管理存储/BMP)Bean开发人员提供存储代码开发人员决定如何存储,容器仍然决定何时进行.容器提供服务:事务处理可以由容器代理来实现容器将得到业务逻辑方法的事务处理需求容器提供事务控制代码也可以由程序员通过代码实现.容器提供服务:其它服务其它服务包括命名(Naming)安全(Security)线程管理(Threadmanagement)这些服务由容器代理完成将减少应用开发人员的负担.分布式对象运算远程对象被作为本地对象来处理:传递信息的方式不变,但开销更大EnterpriseJavaBeans永远运行在服务器上:对Bean的访问永远是远程调用.Stub和Skeleton由EJB生成:“Stub“对要传递出去的信息编码“Tie/Skel“将接受到的信息解码并传递给目标对象.分类:EnterpriseJavaBeans+---EntityBeans--CMP/BMPEjb--|+---SessionBeans--Stateful/Stateless会话Bean(SessionBean):根据EJB规范,一个会话Bean是:代表单个客户端来执行可以参与到事务处理中不直接代表共享于数据库中的数据,但它能访问和更新这些数据相对而言是短暂存在的当EJB容器失效后就不存在---客户端需要重新建立一个信新的会话对象来继续运算实体Bean(EntityBean):根据EJB规范,一个实体Bean是:提供在数据库中数据的对象视图允许被多个用户共享存取访问可以是长期存在(只要它存在于数据库中)实体Bean,它的主键对象,以及它的远程引用将能跨EJB容器的宕机而存在.EJB类和实例构建EJB应用包括来自三方的代码开发人员编写的代码由EJBAPI定义的类和接口由容器自动生成的代码开发人员编写的代码包括Bean类(定义了业务逻辑)Home接口(如何查找或创建bean)Remote接口(如何存取bean)其它组件,根据bean实际要求.EJBHome接口每个bean有一个用于:创建新的bean实例、查找现存的bean(只能是实体bean)Remote接口:定义bean的公共接口---只有在Remote接口中定义的方法才能被客户端访问EJB客户端可以为servlet,JSP,应用程序或其它bean通过JNDI来查找EJBhome接口,步骤为:创建一个JNDIContext(initialcontext)使用JNDIContext来查找beanhome接口使用beanhome接口来创建/查找bean实例使用bean实例完成业务操作实际的存取(对EJB)是通过容器生成的类来完成EJB架构客户端对bean访问永远不是直接的EJBObject(tie)是由容器自身提供的:用来帮助管理bean的生命周期EJB中的角色EJB服务器供应商:开发并销售EJB服务器EJB容器供应商:开发并销售EJB容器Enterprisebean开发人员:开发并销售EJB应用组装人员:将不同的EJB搭建成应用六、EJB的体系结构目前,EJB最新的标准是.,EJB.规范正在讨论中,预计将于明年推出。EJB.定义了三种企业Bean,分别是会话Bean(SessionBean,实体Bean(EntityBean和消息驱动Bean(MessageDrivenBean。SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个SessionBean来为客户端服务。SessionBean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问。EntityBean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于新建一条记录,删除一个EntityBean会同时从数据库中删除对应记录,修改一个EntityBean时,容器会自动将EntityBean的状态和数据库同步。MessageDrivenBean是EJB.中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态SessionBean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。调用一个EJB组件要比调用一个JavaBean麻烦些,由于EJB组件可以分布在多台服务器上,因此必须首先获得远程或本地Home接口,然后使用Home接口创建EJB之后就可以调用EJB的方法了。七、EJB设计模式常见EJB设计模式SESsionFacadepattern通常项目中,客户端往往需要频繁的对服务器端数据进行操作。当采用实体EJB作为数据的抽象层时,如果直接让客户端程序与实体EJB交互,会产生实现一个业务需求便需要大量的EJB属性操作(如下图。这直接导致如下问题:网络负载大(远程客户端时、并发性能低、客户端与服务器端关联度大、可重用性和可维护性差、性能因此有必要在客户端与实体EJB层间加入SessionEJB层,在SessinoEJB中实现商业逻辑并封装对实体EJB的操作。(如下图图:客户端直接与实体EJB交互图:通过SessionEJB层实现SessionFacade模式的好处是:降低了网络负载,SessionEjb可以调用实体EJB的本地接口;将商业逻辑与商业数据隔离;维护与开发方便;显著提高性能。SessionFacade模式因其简单使用,是目前使用很广的模式。但具体应用过程中应注意:避免将所有的操作封装到一个很大的SessionEJB内;服务器端数据结构应由实体EJB实现,除非特例否则避免直接的数据库操作;SessionEjb内某些系统通用操作的代码容易重复(比如权限检查等,解决办法是将系统通用服务封装在JavaClass内。MesSAgeFacadePattern很多时候,一次RequeST需要操作多个EJB又不需要得到即时返回。对这种异步调用,通常应用MessageFa?adePattern.这种时候,如采用SessionFa?adePattern存在如下问题:.客户端等待返回的时间过长。一个SessionEjb的实例在完成客户请求过程中中涉及到的每一次对其他实体Ejb的调用过程中都会被锁定直到得到实体EJB返回信息后才能进行下一步操作。这样造成客户不必要的等待,并很容易因时间导致整个事务失败。.系统可靠性和容错性低。如果需要调用不同系统或服务器上或多个异构数据源的多个EJB时,任何一个环节出错,均导致客户请求失败。以Message-DrivenBean为基础的MessageFacadePattern则可以解决上述异步请求需求。具体架构见下图图:使用MessageFacadePatternMessageFacadePattern的不足之处在于:.Message-DrivenBean没有返回值。这样通知客户执行结果只能依赖于EmAIl或人工等其他手段。.Message-DrivenBean执行过程中无法将捕获的异常直接返回给客户端,即无法使客户端直接直到错误信息。.Message-DrivenBean通过接收Message响应客户请求,对Message内容的合法性(比如对象的类型等依赖与客户端.容易产生运行时错误。MessageFacadePattern经常与SessionFacadePattern在同一个项目里共同使用。EJBmandPatternSessionFacadePattern中将商业逻辑实现封装在SessionEJB中,这种做法带来诸多益处之外也带来如下问题:.由于业务经常的变化,导致经常需要更新SessionEJB代码。.客户端代码不得不包含大量EJB相关的API,不利于后期项目维护。.项目开发测试需要经常的EJB重部署过程。引起上述问题的重要根结就是SessionEJB本身重量级组件,其开发测试部署工作量较大,开发周期较长。以上不足可以通过EJBmandPattern克服。EJBmandPattern中将商业逻辑实现封装在普通的JavaClASs(称之为mandBean中。该模式的具体实现有很多种,通常的框架都包括三部分:.mandBean.由应用开发者写的具体实现某商业操作的JavaClass.主要包含getXXX(),setXXX(),exECute()方法。.Client-SideRoutingLogic.由多个Class组成,用于将请求转发至mandSever,这个过程对客户是透明的。这部分代码可以跨项目使用。路由规则中可以考虑用XML技术。.RemotemandServer.实际执行商业操作请求。通常可以用SessionEJB层实现。整个框架见下图:图:mand的基本框架EJBmandPattern具有如下好处:.适应与需要快速开发环境。因mandBean是轻量级的JavaClass,其编译和调试比较方便。.将表现层与商业实现层隔离,同时将客户端代码与EJB层隔离。.将客户端代码开发与服务器端代码开发相对清晰。早期可以创建空的mandBean方便客户端代码调试。EJBmandPattern的弱处在于:.mandBean中对事务的控制不如SessionEJB中。.mandBean是无状态的。.无法将异常直接返回给客户。.在大项目中,由于商业逻辑复杂,常导致大数量的mandBean存在..作为mandServer的SessionEJB打包时必须包含mandBean以致存在维护上的不便。EJBmandPattern的一个实际实现可以参考IBM’smandframework.DataTransferobjectFactory基于EJB的JEE项目,经常需要在客户端与服务器端传输大量数据。数据的组织形式常用的是DTO(DataTransferObject,服务器端数据对象的抽象)。但因为客户端表现层经常是变化的,所需要服务器端数据也变动频繁,换句话说,DTO的数量和属性经常要更改。因此如何以及在何处生成和维护DTO便是需要考虑的问题。一种解决方案是直接在EntityEJB中直接处理,即在EntityEJB的Bean类中加入getXXXDTO()、setXXXDTO()等。但这样做导致EJB与DTO层紧紧绑定。一旦DTO更改,与该DTO相关的EJB即需要重编译打包。EJB层与客户端层相关联不仅使维护困难而且导致EJB的重用性大大降低。更好的解决方案是利用DataTransferObjectFactory封装对DTO的操作逻辑(如下图。图:DTOFactory示例DTOFactory具体实现方式通常有两种:.普通JavaClass实现,用于SessionFacadePattern使用DTO环境下。.StatelessSessionEJB实现,用于非EJB客户端使用DTO环境下(见图。图:SessionEJB实现DTOFactoryDTOFactory带来如下好处:.使EntityEJB的重用成为可能。由于不含DTO处理逻辑,EntityEJB功能单一化,只作为数据源。不通客户端通过各自的DTOFactory可以从同一个EntityEJB得到各自所需的个性化数据(自定义DTO。.提高可维护性和性能。.可以根据在DTOFactory层生成很复杂的DTO结构,诸如继承、关联关系等,而对客户端提供一个透明、细化的数据接口。使用DTOFactory时需要注意的是:不需为每个EntityEJB定义一个Factory。可以为一系列相关的EntityEJB创建一个Factory,或者只创建一个Factory。GenericAttributeAess使用EntityEJB作为商业数据层时,我们首先需要从数据库加载数据,创建对应的EntityEJB实例,之后对内存中EntityEJB实例的属性进行相应操作。对属性的操作比较直接的做法是:直接调用EntityEJB的getXXX()/setXXX(),通常利用EJB.的本地接口;通过DTOFactory生成DTO。但这两种做法都存在如下问题:.当EntityEJB的属性特别多时候,以上做法会带来复杂罗嗦的代码,使EJB变的庞大无比。.使EntityEJB的客户端(比如SessionEJB和EntityEJB的接口紧密关联。EntityEJB属性的增删都需要更改客户端代码,给项目开发和维护带来不便。事实上可以利用更通用的方式访问EntityEJB的属性,即定义GenericAttributeAessInterface。见下图:图:GenericAttributeAessInterface示例GenericAttributeAessInterface由EntityEJB的本地或远程接口实现,并利用HashMaps传输数据。实现方式常见如下:.BMP类型实体EJB可以在Bean类中定义包含所有属性的私有成员变量HashMap。.CMP类型实体EJB可以在Bean类中可以适用JavaReflectionAPI实现。.建立一个父类,在不同的情况下定义子类重载父类方法。使用GenericAttributeAessInterface需要在客户端与服务器端对属性以及对应的关键字建立统一的命名习惯。常见的做法如下:.建立并保持良好的文档记录和命名约定。.在实体EJB的实现类中定义静态成员映射属性。.创建共享静态类,通过成员变量映射实体EJB属性。.通过JNDI在服务器端保存属性映射关系。GenericAttributeAessInterface的运用带来一下益处:.接口实现后对不通实体EJB都适用。.对属性较多实体EJB能精简代码,并更具维护性。.使运行中动态增删实体EJB属性成为可能。GenericAttributeAessInterface的缺点在于:.访问EJB属性时增加了额外的操作。需要通过关键字映射属性,最后还需进行类型转换。.需要建立客户端与服务器端的命名约定。.因为通过HashMap操作时候需要进行类型转换,容易产生运行时类型不匹配异常。BusinessInterfaceEJB规范要求Bean实现类必须实现所有在远程(或本地接口中定义的所有方法,同时不允许Bean实现类直接继承远程(或本地接口。这就导致编译时候很容易产生两者不一致的问题,即远程(或本地接口中定义的某方法为在Bean实现类中被实现等错误。为避免上诉错误,可以利用应用服务器厂商所提供的工具。但也可以应用EJB的设计架构来实现:定义商业接口。BusinessInterface即创建自定义商业接口,在接口中定义所有EJB提供的商业方法,并让Bean实现类和远程(或本地接口都实现该商业接口。其继承关系见下图:图:商业接口的使用BusinessInterface是个普通的JavaClass。依赖于使用本地接口与远程接口的不通,BusinessInterface的定义略有不同:应用与远程接口时,在接口中的方法需要抛出java.rmi.RemoteException;而应用与本地接口时候则不需要作任何特别处理。应用BusinessInterface时候必须注意一点:EJB规范不允许直接EJB的实例将对自己的引用(this对象返回给客户端,否则编译时候即报错。但使用BusinessInterface后,编译时候无法检查出有无将this对象返回给客户端。这一点需要程序员自己保证。三.内部数据转换策略DataTransferObject基于EJB的JEE多层架构应用中,经常涉及的一个问题就是如何在各层之间传递批量数据,比如客户端对服务器端数据的批量读写操作等。比如需要得到实体EJB的属性,直接的方法是多次调用不通的属性,如下图:图:低效的数据传递方式但这种方法容易导致许多问题,比如性能以及代码的复杂度等,更有效的办法是在一个调用中得到所有需要的属性。所以可以引入DataTransferObject来封装所需要的属性,并在客户与服务器端通过传递该对象一次实现对数据的操作。如下图:图:通过DTO传递数据DTO为普通的JavaClass,通常是服务器端数据的快照。由于网络传输的需要,DTO应该实现java.io.Serializable接口。DTO的设计有两种模型:DomainDTO以及CustomDTO。DomainDTO仅仅实现对服务器数据的拷贝,通常与实体EJB为一对一的关系(也存在为多个相关联的实体EJB对应一个DomainDTO)。DomainDTO通常除用于读取更改实体EJB属性外也可用于创建实体EJB时候。实体EJB与DomainDTO对应关系如下图:图:AountEJB与AountDomainDTODomainDTO的应用除了DTO所具有的一般优点外,还有别的益处:.开发迅速。因为一旦实体EJB设计好后,很容易转换得到DomainDTO。.可以利用DomainDTO的setXXX()方法在客户端进行属性有效性效验。DomainDTO的缺点有:.客户端绑定了服务器端数据模型,不利于维护。.不够灵活,无法处理客户端的多样化数据要求。对一个数百个属性的实体EJB请求一个属性时候却返回一个包含所有属性值的DomainDTO明显是笨重的实现。.导致代码的重复。.DomainDTO中如果嵌套包含了别的DomainDTO时,一旦需服务器端数据的更改而需要重定义DomainDTO模型时候异常困难。CustomDTO则可以克服上述的一些缺点。CustomerDTO仅仅封装用户感兴趣的服务器数据集即可以根据客户端需求创建CustomerDTO。这样作的优点是灵活高效;缺点是大项目中可能导致大量的CustomerDTO存在。通常DomainDTO可以用于数据的更新与创建;CustomerDTO可以用于客户用于表现层的数据读取。两者可以相辅相成。而且使用DTO一般与DTOFactory同时使用。DomainTransferHashMapDTO的使用往往缺乏通用性。不通的用户案例需要创建不同的DTO。当项目很复杂时,从维护性考虑需要更好的数据传输的实现方式。DomainTransferHashMap即利用HashMap作为客户所需数据集的封装。好处是:.良好的维护性。.较大的通用性。不同的客户端可以使用相同的数据传递方式。缺点是:.需要维护客户端与服务器端在属性及其对应关键字的映射关系。.当需要使用基本类型的数据时候,因为HashMap的限制必须将基本类型先转换成对象。.使用得到的数据时,需要进行类型强制转换。DataTransferRowSet当需要处理直接的JDBC调用得到的结果集时,显然用DTO/HashMap已经不合适,因为需要对大量数据进行类型转换等额外操作是很费资源和不必要的,而且最终用户常需要以表格式样显示数据。所以对二维表式数据,更好的处理方式是利用DataTransferRowSet。DataTransferRowSet通过将ResultSet直接转换为RowSet传递给客户端。在SessionEJB中使用RowSet的一段示例代码如下图:图:使用RowSet使用RowSet的好处很多:.接口通用于各样的数据库查询操作。.当需要表格式数据显示时,因为直接从ResultSet得到,所以不需要额外的数据类型转换。缺点是:.数据库结构暴露给客户端。.不符合面向对象设计思想。.依赖于SQL。DataTransferRowSet通常用于只读式数据的显示操作,经常和JDBCforReadingPattern连用。四.事务和数据持久机制JDBCforReadingPattern基于EJB的JEE应用中,通过EJB对数据库的操作可以有两种方式:实体EJB或者SessionEJB中直接利用JDBC访问。客户很多时候取出数据库中数据并以表格方式显示。这种情形如果使用实体EJB会导致如下问题:.引用服务器端频繁的数据库查询和加载操作。因为加载N个实体EJB总需要进行一次find()操作N次数据加载。.如果使用Remote接口,引起频繁的额外网络操作。.对关联关系比较复杂的数据库表结构,很难直接通过EntityEJB表现。因此建议在只需对数据库表数据进行只读访问时候,应该采用JDBCforReadingPattern,即通过JDBC直接访问数据库。除了避免上述使用实体EJB的缺点还带来一下好处:.充分利用数据库能力,比如数据库的缓存机制。.减少了对事务控制的资源。.利用自定义SQL可以按需要比较灵活的读取数据。.只需要一次数据查询,减少了数据库操作。缺点是:.于JEE应用的面向对象设计相违背。.因为SessionEJB代码中包含了自定义SQL,维护性差。.SessionEJB中不得不包含JDBC的API,并且需要了解数据库结构。部属人员:使用相应工具在运行环境下配置EJB系统管理员:监视运行时情况

  ⑹Java的DTO的作用到底是干什么的

  ⑺首先dto和实体变量的名字和个数应该是一模一样的(Dto可以都是String类型或类型也和实体一样,dto只在数据存储时有用,开发的规范是将要存储的数据以dto存到数据库。如:前台页面提交的form表单,后台接收到,转换成dto,存入数据库。你说的:‘’只是为了把查询出实体的值在通过getset转到DTO“这是不对的,这是没意义的。特殊情况下如:前台页面提交的form表单的值不够,还需要再查询别的表,然后转成dto,才可能需要你说的getset几个值。

  ⑻dto是什么意思在java中

  ⑼DTO名解我就不说了,是出自名词王国(java)时常有过度设计的嫌疑。DTO要和PO比较着看,同是数据结构载体,但意义却大相径庭。PO体现了数据存储的结构,当相关接口所需数据恒等于PO时,可以放弃DTO但这种情况很少。通常会是只传输PO的一部分,或者是多个PO的结合体。DTO的意义是减少调用次数,尽量传递多的数据。分布式应用较多

  ⑽beattributedto是什么意思

  ⑾beattributedto归因于双语对照词典结果:beattributedto归于;以上结果来自金山词霸例句:.Ithasarguedthatthediscrepancycannotbeattributedtocoveragealone.他辩称,数据的不一致不能仅仅归因于调查范围。-----------------------------------如有疑问欢迎追问!满意请点击右上方【选为满意回答】按钮

  ⑿wasattributedto是什么意思

  ⒀was是be的第三人称的过去式,所以就是说beattributedto的意思。beattributedto...,归因于...例句:.ThefactthatChinaisgenerallyapeacelovingnationcanalso?beattributed?to?thisprinciple.事实上,中国通常是一个爱好和平的国家也可以归因于这一原则。

  ⒁wereattributedto是什么意思

  ⒂这幅未署名的画被错误地认为是拉斐尔的作品。Orifice’spressurelossesareattributedtoentrainmentandeddyformation孔板的压力被认为是由卷吸和涡流造成的。Heattributedthistoadilutioneffectoftheherbicide他把这归因于除草剂的稀释效应。Havingthequalitiesofgallantryandhonorattributedtoanidealknight.武士精神的具有勇武精神及荣誉感等被认为是理想的武士所就具有的品质的China’semergenceembodiesthesethreemajordevelopments.Itsemergencecanbeattributedtothefollowingfactors.中国的崛起过程中体现了以上这三个主要发展现象,而中国的崛起是基于以下的因素

  ⒃在java中dto,bo,pojo,po是什么,简单说明

  ⒄DTO(DataTransferObject)数据传输对象:主要用于远程调用等需要大量传输对象的地方。BO(businessobject)业务对象:从业务模型的角度看,见UML元件领域模型中的领域对象.封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作.POJO(plainordinaryjavaobject)简单无规则java对象纯的传统意义的java对象.就是说在一些Object/RelationMapping工具中,能够做到维护数据库表记录的persisentobject完全是一个符合JavaBean规范的纯Java对象,没有增加别的属性和方法.我的理解就是最基本的JavaBean,只有属性字段及setter和getter方法!PO(persistantobject)持久对象在o/r映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数据库的操作.

  ⒅wasattributedto是什么意思

  ⒆was是be的第三人称的过去式,所以就是说beattributedto的意思。beattributedto...,归因于...例句:.ThefactthatChinaisgenerallyapeacelovingnationcanalso?beattributed?to?thisprinciple.事实上,中国通常是一个爱好和平的国家也可以归因于这一原则。

您可能感兴趣的文章:

相关文章