《企业应用架构模式中文版》学习笔记

上传人:壹****1 文档编号:561553245 上传时间:2023-06-28 格式:DOC 页数:6 大小:351KB
返回 下载 相关 举报
《企业应用架构模式中文版》学习笔记_第1页
第1页 / 共6页
《企业应用架构模式中文版》学习笔记_第2页
第2页 / 共6页
《企业应用架构模式中文版》学习笔记_第3页
第3页 / 共6页
《企业应用架构模式中文版》学习笔记_第4页
第4页 / 共6页
《企业应用架构模式中文版》学习笔记_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《《企业应用架构模式中文版》学习笔记》由会员分享,可在线阅读,更多相关《《企业应用架构模式中文版》学习笔记(6页珍藏版)》请在金锄头文库上搜索。

1、企业应用架构模式中文版学习笔记本书先介绍了一些企业应用开发的基础知识,比如分层架构、WEB表现、业务逻辑、数据库映射、并发、会话、分布策略等等。通过使用场景、解决方案、UML等手段详细介绍了设计模式(包括一些常用的设计模式GOF23和本书上新创的设计模式)。了解书中这些模式是干什么的、它们解决什么问题、它们是如何解决问题的。这样,如果你碰到类似的问题,就可以从书中找到相应的模式。可以为你节约成本、缩短项目周期时间、避免风险,以确保项目能够完美的完成。、三个基本层次:表现层、领域层、数据源层层次职责表现层提供服务,显示信息(例如在Windows或HTML页面中,处理用户请求(鼠标点击、键盘敲击等

2、),HTTP请求,命令行调用,批处理AP/)领域层逻辑,系统中真正的核心数据源层与数据库,消息系统、事务管理器及其他软件包通信关于依赖性的普遍性原则:领域层和数据源层绝对不要依赖于表现层。旦选择了处理节点,接下来就应该尽可能使所有代码保持在单一进程内完成(可能是在同一个节点上,也可能拷贝在集群中的多个节点上)。除非不得已,否则不要把层次放在多个进程中完成。因为那样做不但损失性能,而且增加复杂性,因为必须增加类似下面的模式,如远程外观和数据传输对象。复杂性增压器:分布、显式多线程、范型差异、多平台开发以及极限性能要求(如每秒100个事务以上)。二、领域逻辑领域逻辑的组织可以分成三种主要模式:事务

3、脚本、领域模型、表模块。三者之间的区别:事务脚本是一个过程来控制一系列动作逻辑的执行。领域模型不再是由一个过程来控制用户某动作的逻辑,而是由每一个对象都承担一部分相关逻辑。这些对象可以看成是领域的不同组成部分。表模块只有一个公共的合同类实例,而领域模型对数据库中每一个合同都有一个相应的合同类的实例。在使用领域模型的时候,它的读取应该把相关联的对象也一块读出来。例如,读取一个合同,应该把合同涉及到的产品和定购厂商的对象加载到内存中。由时候为了避免这些没有必要的连带读取,我们可以使用【延迟加载】模型。读取数据的时候,性能问题可能回变得比较突出。这就导致了几条经验法则。1)、尽可能一次查询多个记录,

4、不要一次查询一个记录,然后进行多次查询。可以一次查询多条相关的记录,例如使用联合查询。或者使用多条SQL语句。2避免多次进入数据库的方法是使用连接(Join),这样就可以通过一次返回多个表。可以制作一个入口,让入口完成相关数据的一次性读取。3)数据库中进行优化。DBA来优化数据库。映射到关系数据库的时候,一般会遇到三种情况:1)自己选择数据库方案。)不得不映射到一个现有数据库方案,这个方案不能改变。)不得不映射到一个现有数据库方案,但这个方案是可以考虑改变的。最简单的情况是自己选择数据库方案,并且不用迁就领域逻辑的复杂性。当已经存在一个数据库方案的时候,应该逐步建立领域模型并包括数据映射器,把

5、数据保存到现有的数据库中。、并发并发问题:更新丢失和不一致读。并发问题,人们提出了各种不同的解决方案。对于企业应用来说,有两个非常重要的解决方案:一个是隔离,一个是不变性。隔离是划分数据,使得每一片数据都可能被一个执行单元访问。比如文件锁。不变性是识别那些不变的数据,不用总考虑这些数据的并发问题而是广泛地共享它们。当有一些可变数据无法隔离的时候,会发生什么样的情况呢?总的来说,我们可以使用两种形式的并发控制策略:乐观并发控制和悲观并发控制。如果把乐观锁看作是关于冲突检测的,那么悲观锁就是关于冲突避免的。假如Martin和David同时都要编辑Customer文件。如果使用乐观锁策略,他们两个人

6、都能得到一份文件的拷贝,并且可以自由编辑文件。假设Dav/d第一个完成了工作,那么他可以毫无困难地更新他的修改。但是,当Martin想要提交他的修改时,并发控制策略就会开始起作用。源代码控制系统会检测到在Martin的修改和Dav/d的修改之间存在着冲突,因而拒绝Martin的提交,并由Martin负责指出怎样处理这种情况。如果使用悲观锁策略,只要有人先取出文件,其他人就不能对该文件进行编辑。因此,假如是Martin先取出了文件,那么Dav/d就只能在Martin完成任务并提交之后才能对该文件进行操作。多种技术处理死锁:一种是使用软件来检测死锁的发生。另一种是给每一个锁都加上时间限制,一旦到达

7、时间限制,所加的所就会失效,工作就会丢失。软件事务经常使用AC/D勺属性来描述。原子性(Atomicity):在一个事务里,动作序列的每一个步骤都必须是要么全部成功,要么所有的工作都将回滚。部分完成不是一个事务概念。致性(Consistency):在事务开始和完成的时候,系统的资源都必须处于一致的、没有被破坏的状态。隔离性(/so/ation):个事务,直到它被成功提交之后,它的结果才对其他所有的事务是可见的。持久性(Durabi/ity):个已提交事务的任何结果都必须是永久性的,即在任何崩溃的情况的能保存下来。大多数企业应用是在数据库方面涉及到事务的,但还有很多情况要进行事务控制,比如说哦消

8、息队列、打印机和ATM等。为了处理最大的吞吐率,现代的事务处理系统被设计成保证事务尽可能短,尽可能不让事务跨越多个请求;尽可能晚打开事务。、分布策略按类模型进行分布的方法不可行的主要原因与计算机的基本特点有关。进程内的过程调用非常快。两个对立进程间的过程调用就慢了一个数量级。在不同机器间运行过程又要慢一两个数量级,取决于网络拓扑。本地接口最好是细粒度接口。但细粒度不能很好地用在远程调用中。分布对象设计第一定律:不要分布使用对象,大多数情况下是使用集群系统。、一些关于具体技术的建议、Java和J2EE企业级JavaBean(EJB)的价值有多大,这个是JAVA世界中最大的争论。但是要构建良好的J

9、2EE引用,其实并不需要EJB。使用POJO(普通Java对象)和JDBC同样能够完成这一任务。J2EE的设计选择随使用的模式不同而不同,同样,也受到领域逻辑的制约。2、.NET.NET、Visua/Studio以及微软世界应用中,其中起决定作用的模式是表模块。.NE7大力宣传WebServices,但是我不会在一个应用程序内部使用WebServices,而只会像Java中一样,使用它们作为一种允许应用集成的表现层。、存储过程、WebServicesWebServices使得重用成为现实,并最终导致系统集成商的消失。、其他分层七、模式领域逻辑模式1、事务脚本:使用过程来组织业务逻辑,每个过程处

10、理来自表现层的单个请求。事务脚本置于何处将取决于你如何组织你的软件层次,它可能会位于服务器页面、CGI脚本和分布式会话对象中。我喜欢尽可能的分离事务脚本。至少应当将它们放在不同的子程序中,而更好的方法则是将它们置于与其他处理表现层和数据源层的类相独立的类中。此外,绝不要让事务脚本调用任何表现层逻辑;这样会使我们容易修改代码和测试事务脚本。可以用两种方法来把事务脚本组织成类。一种是把多个事务脚本放在一个类中,每个类围绕一个主题将相关的事务脚本组织在一起。另一种方法则是每个事务脚本对应一个类,通过命令模式来完成消息传递。2、领域模型:合并了行为和数据的领域的对象模式。领域模型按照它的复杂程度分,可

11、以分为:简单领域模型和复杂领域模型。简单的领域模型如【活动记录】,可以应对领域逻辑比较简单的系统。复杂的领域逻辑需要复杂的领域模型。3、表模块:处理某一数据库表或视图中所有行为的业务逻辑的一个实例。表模块以一个类对应数据库中的一个表来组织领域逻辑,而且使用单一的类实例来包含将对数据进行的各种操作程序。它与领域逻辑的主要区别在于,如果你有许多订单,领域模型对每一个订单都有一个对象,而表模块则只用一个对象来处理所有的订单。4、服务层:通过一个服务层来定义应用程序边界,在服务层中建立一组可用的操作集合,并在每个操作内部协调应用程序的响应。川户界面罟資层领域模型数搦源层懾认服务数据源架构模式1、表数据

12、入口:充当数据库表访问入口的对象。一个实例处理表中所有的行。表数据入口包含了用于单个表或视图的所有SQL,如选择、插入、更新、删除等。其他代码调用它的方法来实现所有与数据库的交互。2、行数据入口:充当数据源中单条记录入口的对象,每行一个实例。3、活动记录:一个对象,它包装数据库表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。4数据映射器:在保持对象和数据库彼此独立的情况下在二者之间移动数据的一个映射器层。数据映射器是分离内存对象与数据库的一个软件层。其职责是在内存对象与数据库之间的传递数据并保持它们彼此独立。有了数据映射器,内存对象甚至不需知道数据库的存在;它们也不需要SQL接

13、口代码,当然也不需要知道数据库方案。由于数据映射器是映射器的一种形式,因此数据映射器自身根本不为领域层所察觉。对象关系行为模式1、工作单元:维护受业务影响的对象列表,并协调变化的写入和并发问题的解决。工作单元是一个记录这些变化的对象。只要开始做一些可能会对数据库有影响的操作,就创建一个工作单元去记录这些变化。每当创建、改变或者删除一个对象时,就通知此工作单元。工作单元的关键是在提交的时候,它决定要做什么。它打开一个事务,做所有的并发检查(使用悲观离线锁和乐观离线锁)并向数据库写入所做的修改。开发人员根本不用显式调用数据库更新方法。这样,他们就不必记录所修改的内容或者不必担心的引用完整性如何影响

14、他们的操作顺序。2、标识映射:通过在映射中保存每个已经加载的对象,确保每个对象只加载一次。当要访问对象的时候,通过映射来查找他们。3、延迟加载:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。实现延迟加载的四种方法:延迟初始化、虚代理、值保持器、重影。对象关系结构模式1、标识域:为了在内存对象和数据库行之间维护标识而在对象内存的一个数据库标识域。数据库中通过主键来区分数据行,然而,内存对象不需要这样一个键,因此为对象系统能够保证正确的身份确认(祀+中是直接用原始内存位置)。2外键映射:把对象间的关联映射到表间的外键引用。3、关联表映射:把关联保存为一个表,带有指向(有关联所连

15、接的)表的外键。4依赖映射:让一个类的部分类执行数据库映射。5、嵌入值:把一个对象映射成另一个对象表的若干字段。6、序列化LOB:通过将多个对象序列化到一个大对象(LOB)中保存一个对象图,并存储在一个数据库字段中。7、单表继承:将类的继承层次表示为一个单表,表中的各列代表不同类中的所有域。8、类表继承:用每个类对应一个表来表示类的继承层次。9、具体表继承:用每个具体类对应一个表来表示类的继承层次。对象关系元数据映射模式1、元数据映射:在元数据中保持关系对象映射的详细信息。元数据映射使开发者可以以一种简单的表格形式来定义映射,这些映射可由通用代码来处理,从而实现读取、插入和更新数据的细节。使用元数据映射最主要的决策是如何根据运行代码来表示元数据中的信息。有两种主要的途径:代码生成和反射编程。2、查询对象:描述一次数据库查询的对象。3、资源库:协调领域和数据映射层,利用类似于集合的接口来访问领域对象。WEB表现模式1、模型视图控制器(MVC):把用户界面交互分到不同的三种角色中。2页面控制器:在WEB站点上为特定页面或者动作处理请求的对象。3、前端控制器:为一个WEB站点处理所有请求的控制器。4、模板视图:通过在HTML也面中嵌入标记向HTML发送消息。5、转换视图:一个视图,它一项一项地处理领域数据,并且把它们转换成HTM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号