文章插图
企业套用架构模式【企业套用架构模式】《企业套用架构模式》是2010年04月机械工业出版社出版的图书,作者是福勒 。本书是为致力于设计和构建企业套用的软体架构师、设计人员和编程人员而写的,同时也可作为高等院校计算机专业及软体学院相关课程的参考教材 。
基本介绍书名:企业套用架构模式
作者:福勒
原版名称:Patterns of Enterprise Application Architecture
译者:王怀民、周斌
ISBN:9787111303930
页数:363
定价:59元
出版社: 机械工业出版社
出版时间:2010-4-1
开本:16开
图书简介这是一本能够套用于任何一种企业套用平台的、关于解决方案的、不可或缺的手册 。内容简介《企业套用架构模式》作者是当今面向对象软体开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够套用于任何一种企业套用平台的、关于解决方案的、不可或缺的手册 。《企业套用架构模式》获得了2003年度美国软体开发杂誌图书类的生产效率奖和读者选择奖 。《企业套用架构模式》分为两大部分 。第一部分是关于如何开发企业套用的简单介绍 。第二部分是《企业套用架构模式》的主体,是关于模式的详细参考手册,每个模式都给出使用方法和实现信息,并配以详细的Java代码或C#代码示例 。此外,整《企业套用架构模式》中还用了大量UML图来进一步阐明有关概念 。编辑推荐《企业套用架构模式》:企业套用开发的实践得益于多种新技术的出现,多层的面向对象平台(如Java、.NET)已经日渐平常 。这些新工具和新技术有能力构建更强大的企业应用程式,但是在实现上还不太容易 。由于开发人员未能充分理解有经验的对象程式开发人员在架构方面的经验和教训.因此企业套用中经常存在一些共同的错误 。《企业套用架构模式》就是面向企业套用开发者的,可帮助他们迎接这种艰难挑战 。《企业套用架构模式》的作者Ma riin Fowler注意到,儘管技术本身存在变化——从Smalltalk到CORBA,再到 。Java和NET,但基本的设计思想并没有太多变化.可以加以适当调整,用来解决那些共同的问题 。在一组专家级合作者的帮助下,作者将40多种经常出现的解决方案转化成模式,最终写成这本能够套用于任何一种企业套用平台的、关于解决方案的、不可或缺的手册 。《企业套用架构模式》曾于2002年荣获美国软体开发杂誌图书类的生产效率奖和读者选择奖 。《企业套用架构模式》涉及两部分内容 。第一部分是关于如何开发企业套用的简单介绍 。在阅读这部分时.读者可以从头到尾通读,以掌握《企业套用架构模式》的範围 。第二部分是《企业套用架构模式》的主体,是关于模式的详细参考手册.每个模式都给出使用方法和实现信息,并配有详细的Java代码或C#代码的示例 。此外,整《企业套用架构模式》中还用了大量UML图来进一步阐明有关概念 。《企业套用架构模式》主要内容:将企业套用分层组织企业业务逻辑的主要方法在对象和关係资料库之间进行映射的深层次解决方案通过模型一视图一控制器来组织Web表现处理跨多事务的数据的并发问题设计分散式对象接口作者简介福勒(Martin Fower),是一位独立谘询顾问,他运用对象技术解决企业问题已经超过十年 。他的顾问领域包括健康管理、金融贸易,以及法人财务 。他的客户包括Chrysler,Citibank,UK National Health Service,AndersenConsulting,NetscapeCommunications 。此外Fowler也是objects、UML、patterns技术的一位合格讲师,他是《AnalysisPatterns》和《UML Distilled》的作者 。目录译者序前言模式列表引言 10.1 架构 10.2 企业套用 20.3 企业套用的种类 30.4 关于性能的考虑 40.5 模式 60.5.1 模式的结构 70.5.2 模式的局限性 9第一部分 表述第1章 分层 121.1 企业套用中层次的演化 131.2 三个基本层次 141.3 为各层选择运行环境 15第2章 组织领域逻辑 192.1 抉择 222.2 服务层 23第3章 映射到关係资料库 25.3.1 架构模式 253.2 行为问题 283.3 读取数据 293.4 结构映射模式 303.4.1 关係的映射 303.4.2 继承 333.5 建立映射 343.6 使用元数据 353.7 资料库连线 363.8 其他问题 383.9 进一步阅读 38第4章 Web表现层 394.1 视图模式 414.2 输入控制器模式 434.3 进一步阅读 43第5章 并发 455.1 并发问题 455.2 执行语境 465.3 隔离与不变性 475.4 乐观并发控制和悲观并发控制 485.4.1 避免不一致读 495.4.2 死锁 495.5 事务 505.5.1 ACID 515.5.2 事务资源 515.5.3 减少事务隔离以提高灵活性 525.5.4 业务事务和系统事务 535.6 离线并发控制的模式 545.7 套用伺服器并发 555.8 进一步阅读 56第6章 会话状态 576.1 无状态的价值 576.2 会话状态 586.3 存储会话状态的方法 59第7章 分布策略 617.1 分布对象的诱惑 617.2 远程接口和本地接口 627.3 必须使用分布的情况 637.4 关于分布边界 647.5 分布接口 64第8章 通盘考虑 678.1 从领域层开始 678.2 深入到数据源层 688.2.1 事务脚本的数据源 688.2.2 表模组的数据源 698.2.3 领域模型的数据源 698.3 表现层 698.4 一些关于具体技术的建议 708.4.1 Java和J2EE 708.4.2 .NET 718.4.3 存储过程 718.4.4 Web Services 728.5 其他分层方式 72第二部分 模 式第9章 领域逻辑模式 769.1 事务脚本(Transaction Script) 76 9.1.1 运行机制 769.1.2 使用时机 779.1.3 收入确认问题 789.1.4 例:收入确认(Java) 789.2 领域模型(Domain Model) 819.2.1 运行机制 819.2.2 使用时机 839.2.3 进一步阅读 839.2.4 例:收入确认(Java) 849.3 表模组(Table Module) 879.3.1 运行机制 889.3.2 使用时机 909.3.3 例:基于表模组的收入确认(C#) 909.4 服务层(Service Layer) 939.4.1 运行机制 949.4.2 使用时机 969.4.3 进一步阅读 969.4.4 例:收入确认(Java) 96第10章 数据源架构模式 10110.1 表数据入口(Table Data Gateway) 10110.1.1 运行机制 10110.1.2 使用时机 10210.1.3 进一步阅读 10210.1.4 例:人员入口(C#) 10310.1.5 例:使用数据集(C#) 10410.2 行数据入口(Row Data Gateway) 10610.2.1 运行机制 10710.2.2 使用时机 10810.2.3 例:人员记录(Java) 10810.2.4 例:领域对象的数据保持器(Java) 11110.3 活动记录(Active Record) 11210.3.1 运行机制 11210.3.2 使用时机 11310.3.3 例:一个简单的Person类(Java) 11310.4 数据映射器(Data Mapper) 11510.4.1 运行机制 11610.4.2 使用时机 11910.4.3 例:一个简单的数据映射器(Java) 11910.4.4 例:分离查找方法(Java) 12310.4.5 例:创建一个空对象(Java) 126第11章 对象-关係行为模式 12911.1 工作单元(Unit of Work) 12911.1.1 运行机制 12911.1.2 使用时机 13311.1.3 例:使用对象注册的工作单元(Java) 13411.2 标识映射(Identity Map) 13711.2.1 运行机制 13711.2.2 使用时机 13911.2.3 例:标识映射中的方法(Java) 13911.3 延迟载入(Lazy Load) 14011.3.1 运作机制 14011.3.2 使用时机 14211.3.3 例:延迟初始化(Java) 14211.3.4 例:虚代理(Java) 142 11.3.5 例:使用值保持器(Java) 14411.3.6 例:使用重影(C#) 144第12章 对象-关係结构模式 15112.1 标识域(Identity Field) 15112.1.1 工作机制 15112.1.2 使用时机 15412.1.3 进一步阅读 15412.1.4 例:整型键(C#) 15412.1.5 例:使用键表(Java) 15512.1.6 例:使用组合键(Java) 15712.2 外键映射(Foreign Key Mapping) 16612.2.1 运行机制 16712.2.2 使用时机 16912.2.3 例:单值引用(Java) 16912.2.4 例:多表查询(Java) 17212.2.5 例:引用集合(C#) 17312.3 关联表映射(Association Table Mapping) 17512.3.1 运行机制 17612.3.2 使用时机 17612.3.3 例:雇员和技能(C#) 17712.3.4 例:使用直接的SQL(Java) 17912.3.5 例:用一次查询查多个雇员(Java) 18212.4 依赖映射(Dependent Mapping) 18612.4.1 运行机制 18612.4.2 使用时机 18712.4.3 例:唱片和曲目(Java) 18812.5 嵌入值(Embedded Value) 19012.5.1 运行机制 19012.5.2 使用时机 19012.5.3 进一步阅读 19112.5.4 例:简单值对象(Java) 19112.6 序列化LOB(Serialized LOB) 19212.6.1 运行机制 19312.6.2 使用时机 19412.6.3 例:在XML中序列化一个部门层级(Java) 19412.7 单表继承(Single Table Inheritance) 19612.7.1 运行机制 19712.7.2 使用时机 19712.7.3 例:运动员的单表(C#) 19812.7.4 从资料库中载入对象 19912.8 类表继承(Class Table Inheritance) 20212.8.1 运行机制 20212.8.2 使用时机 20312.8.3 进一步阅读 20312.8.4 例:运动员和他们的家属(C#) 20312.9 具体表继承(Concrete Table Inheritance) 20812.9.1 运行机制 20912.9.2 使用时机 21012.9.3 例:具体运动员(C#) 210 12.10 继承映射器(Inheritance Mappers) 21412.10.1 运行机制 21512.10.2 使用时机 216第13章 对象-关係元数据映射模式 21713.1 元数据映射(Metadata Mapping) 21713.1.1 运行机制 21713.1.2 使用时机 21813.1.3 例:使用元数据和反射(Java) 21913.2 查询对象(Query Object) 22413.2.1 运行机制 22513.2.2 使用时机 22513.2.3 进一步阅读 22613.2.4 例:简单的查询对象(Java) 22613.3 资源库(Repository) 22813.3.1 运行机制 22913.3.2 使用时机 23013.3.3 进一步阅读 23113.3.4 例:查找一个人所在的部门(Java) 23113.3.5 例:资源库交换策略(Java) 231第14章 Web表现模式 23314.1 模型-视图-控制器(Model View Controller) 23314.1.1 运行机制 23314.1.2 使用时机 23414.2 页面控制器(Page Controller) 23514.2.1 运行机制 23514.2.2 使用时机 23614.2.3 例:Servlet控制器和JSP视图的简单演示(Java) 23614.2.4 例:使用JSP充当处理程式(Java) 23814.2.5 例:代码隐藏的页面控制器(C#) 24114.3 前端控制器(Front Controller) 24314.3.1 运行机制 24414.3.2 使用时机 24514.3.3 进一步阅读 24614.3.4 例:简单的显示(Java) 24614.4 模板视图(Template View) 24814.4.1 运行机制 24914.4.2 使用时机 25114.4.3 例:分离的控制器,使用JSP充当视图(Java) 25214.4.4 例:伺服器页面(C#) 25314.5 转换视图(Transform View) 25614.5.1 运行机制 25614.5.2 使用时机 25714.5.3 例:简单的转换(Java) 25714.6 两步视图(Two Step View) 25914.6.1 运行机制 25914.6.2 使用时机 26014.6.3 例:两阶XSLT(XSLT) 26414.6.4 例:JSP和定製标记(Java) 26614.7 套用控制器(Application Controller) 26914.7.1 运行机制 27014.7.2 使用时机 27114.7.3 进一步阅读 271 14.7.4 例:状态模型套用控制器(Java) 271第15章 分布模式 27515.1 远程外观(Remote Facade) 27515.1.1 运行机制 27615.1.2 使用时机 27815.1.3 例:使用Java语言的会话bean来作为远程外观(Java) 27815.1.4 例:Web Service(C#) 28115.2 数据传输对象(Data Transfer Object) 28515.2.1 运行机制 28515.2.2 使用时机 28815.2.3 进一步阅读 28915.2.4 例:传输唱片信息(Java) 28915.2.5 例:使用XML实现序列化(Java) 293第16章 离线併发模式 29516.1 乐观离线锁(Optimistic Offline Lock) 29516.1.1 运行机制 29616.1.2 使用时机 29816.1.3 例:领域层与数据映射器(Java) 29816.2 悲观离线锁(Pessimistic Offline Lock) 30216.2.1 运行机制 30316.2.2 使用时机 30516.2.3 例:简单锁管理对象(Java) 30516.3 粗粒度锁(Coarse-Grained Lock) 31016.3.1 运行机制 31016.3.2 使用时机 31216.3.3 例:共享的乐观离线锁(Java) 31216.3.4 例:共享的悲观离线锁(Java) 31616.3.5 例:根对象乐观离线锁(Java) 31716.4 隐含锁(Implicit Lock) 31816.4.1 运行机制 31816.4.2 使用时机 31916.4.3 例:隐含的悲观离线锁(Java) 319第17章 会话状态模式 32117.1 客户会话状态(Client Session State) 32117.1.1 运行机制 32117.1.2 使用时机 32217.2 伺服器会话状态(Server Session State) 32217.2.1 运行机制 32217.2.2 使用时机 32417.3 资料库会话状态(Database Session State) 32417.3.1 运行机制 32417.3.2 使用时机 325第18章 基本模式 32718.1 入口(Gateway) 32718.1.1 运行机制 32718.1.2 使用时机 32818.1.3 例:私有讯息服务的入口(Java) 32918.2 映射器(Mapper) 33118.2.1 运行机制 33218.2.2 使用时机 332 18.3 层超类型(Layer Supertype) 33218.3.1 运行机制 33218.3.2 使用时机 33318.3.3 例:领域对象(Java) 33318.4 分离接口(Separated Interface) 33318.4.1 运行机制 33418.4.2 使用时机 33518.5 注册表(Registry) 33518.5.1 运行机制 33618.5.2 使用时机 33718.5.3 例:单子注册表(Java) 33718.5.4 例:执行绪安全的注册表(Java) 33818.6 值对象(Value Object) 33918.6.1 运行机制 33918.6.2 使用时机 34018.7 货币(Money) 34018.7.1 运行机制 34118.7.2 使用时机 34218.7.3 例:货币类(Java) 34318.8 特殊情况(Special Case) 34618.8.1 运行机制 34718.8.2 使用时机 34718.8.3 进一步阅读 34718.8.4 例:一个简单的空对象(C#) 34718.9 外挂程式(Plugin) 34818.9.1 运行机制 34918.9.2 使用时机 35018.9.3 例:ID生成器(Java) 35018.10 服务桩(Service Stub) 35218.10.1 运行机制 35218.10.2 使用时机 35318.10.3 例:销售税服务(Java) 35318.11 记录集(Record Set) 35518.11.1 运行机制 35518.11.2 使用时机 356参考文献 359序言“每一个模式描述了一个在我们周围不断重複发生的问题,以及该问题的解决方案的核心 。这样,你就能一次又一次地使用该方案而不必做重複劳动 。”—Christopher Alexander本书是面向对象大师Martin Fowler继《Analysis Patterns》、《UML Distilled》、《Planning Extreme Programming》、《Refactoring》之后的又一力作 。“温故而知新” 。Fowler在本书中再次向我们证明了《礼记》中这句古训的震撼力—他在回头审视自己及同仁多年来从事企业套用开发的经验和教训后,归纳总结了40多种企业套用架构的设计模式 。这些模式从不同层次、不同侧面向我们展示了什幺是好的企业套用架构?如何设计好的企业套用?正如作者自己所言,企业套用在某些方面比其他软体(如电信通信软体)複杂得多:纷繁複杂的企业数据、“不合逻辑”的业务规则、变化莫测的用户需求,等等 。环顾四周—CORBA、J2EE、.NET—企业套用开发技术可谓“前仆后继、层出不穷”,开发平台的种类之多就更不必说 。招式套路可以千变万化,扎实深厚的“内功”却是始终如一!虽然企业套用涉及的软体技术不断翻新,但是基本的架构及设计思想却没有太多变化 。将以前行之有效的设计思路和方法加以适当调整,并套用到当前的问题上,是最高效的做法 。在一组专家级合作者的帮助下,Martin将40多种经常出现的解决方案转化成模式,最终融会成这本“内功心法” 。在仔细研读、用心揣摩本书之后,希望它能够帮助你应对任何一种企业套用平台,驾驭任何一种企业套用技术—无论是现在的技术还是未来的技术 。熟悉Fowler的读者都知道,这位大师的写作风格可谓是“深入浅出,娓娓道来” 。本书也是一样 。前8章是关于企业套用的背景知识,如分层架构、Web表现、业务逻辑、资料库映射、并发、会话、分布策略,等等 。在此基础上,随后的各章分别对与这些背景知识相关的设计模式进行了详细的介绍 。与其他设计模式的书一样,本书从模式的使用场景、解决方案、UML表示等方面予以介绍,详略有致 。就连示例的程式语言的选取—Java和C#—也是与他的写作风格一脉相承的 。夜已深,窗外依旧是绵绵不断的早春小雨 。让我们酌一杯清茶,一起来品味大师的话,一起来品味“源于实践、指导实践”的苦涩与甘甜—“模式的关键点是它们源于实践 。必须观察人们的工作过程,发现其中好的设计,并找出‘这些解决方案的核心’ 。这不是一个简单的过程,但是一旦发现了某个模式,它将是非常有价值的 。对于我来说,价值之一是能够撰写这样一本参考书 。你不必通读本书的全部内容,也不必通读任何一本有关模式的书 。只需要了解到这些模式都是乾什幺的、它们解决什幺问题、它们是如何解决问题的,就足够了 。这样,一旦你碰到类似问题,就可以从书中找出相应的模式 。那时,你再深入了解相应的模式也为时不晚 。”文摘我虽然没有从事过早期批处理系统时期的任何工作,但我认为当时的软体工作人员不会太关注层次的概念,只要编写操作某些档案(ISAM、VSAM等)格式的程式,这就是当时的套用 。它不需要层次 。20世纪90年代,随着客户/伺服器系统的出现,分层的概念更明显了 。这样的系统是一种两个层次的系统:客户端包括用户界面和其他套用代码,伺服器端通常是关係型资料库 。常见的客户端工具如VB、PowerBuilder和Delphi 。这些工具使得构建数据密集型套用非常容易 。因为它们的用户界面控制项通常都是SQL感知的 。因此,可以通过将控制项拖拽到“设计区域”来建立界面,然后再使用属性表单把控制项连线到后台资料库 。如果套用仅仅包括关係数据的简单显示和修改,那幺这种客户/伺服器系统的工作方式非常合适 。问题来自领域逻辑:如业务规则、验证、计算等 。通常,人们会把它们写在客户端,但是这样很笨拙,并且往往把领域逻辑直接嵌入到用户界面 。随着领域逻辑的不断複杂化,这些代码将越来越难以使用 。而且,这样做很容易产生冗余代码,这意味着简单的变化都会导致要在很多界面中寻找相似代码 。另外一种办法是把这些领域逻辑放到资料库端,作为存储过程 。但是,存储过程只提供有限的结构化机制,这将再次导致笨拙的代码 。而且,很多人喜欢关係型资料库的原因之一是SQL是一个标準,允许他们更换资料库厂商 。儘管真正更换资料库厂商的用户寥寥无几,但还是有很多人希望拥有这种选择,并且没有太大的附加代价 。由于存储过程都是资料库厂商私有的,因此普通用户被剥夺了这种选择权 。在客户/伺服器方式逐渐大众化的同时,面向对象方式开始崛起 。面向对象为领域逻辑的问题找到了答案:转到三层架构的系统 。在这种方式下,在表现层实现用户界面,在领域层实现领域逻辑,在数据源层存取数据 。这种方式使你可以将複杂的领域逻辑从界面代码中抽取出来,单独放到中间层,用对象加以建模和组织 。
- 现代电力电子器件及其套用
- A级 高等学校英语套用能力考试教程
- 信息系统技术基础及套用
- 可程式序控制器原理·套用·实验
- 企业车间安全生产标语有什么
- 企业改造决策
- 计税成本
- 信息资源获取与套用
- 伯克霍夫套用数学奖
- 网站架构案例精解