加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 企业应用架构模式

企业应用架构模式.pdf

企业应用架构模式

angaesky
2010-09-07 0人阅读 举报 0 0 暂无简介

简介:本文档为《企业应用架构模式pdf》,可适用于IT/计算机领域

华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcom经典重读企业应用架构模式PatternsofEnterpriseApplicationArchitecture(英)MartinFowler著王怀民周斌译UMLChina审校华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcom本书作者是当今面向对象软件开发的权威他在一组专家级合作者的帮助下将多种经常出现的解决方案转化成模式最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。本书获得了年度美国软件开发杂志图书类的生产效率奖和读者选择奖。本书分为两大部分。第一部分是关于如何开发企业应用的简单介绍。第二部分是本书的主体是关于模式的详细参考手册每个模式都给出使用方法和实现信息并配以详细的Java代码或C#代码示例。此外整本书中还用了大量UML图来进一步阐明有关概念。本书是为致力于设计和构建企业应用的软件架构师、设计人员和编程人员而写的同时也可作为高等院校计算机专业及软件学院相关课程的参考教材。SimplifiedChineseeditioncopyright©byPearsonEducationAsiaLimitedandChinaMachinePressOriginalEnglishlanguagetitle:PatternsofEnterpriseApplicationArchitecture(ISBN)byMartinFowler,Copyright©AllrightsreservedPublishedbyarrangementwiththeoriginalpublisher,PearsonEducation,Inc,publishingasAddisonWesley本书封面贴有PearsonEducation(培生教育出版集团)激光防伪标签无标签者不得销售。封底无防伪标均为盗版版权所有侵权必究本书法律顾问北京市展达律师事务所本书版权登记号:图字:图书在版编目(CIP)数据企业应用架构模式(英)福勒(Fowler,M)著王怀民周斌译北京:机械工业出版社(经典重读)书名原文:PatternsofEnterpriseApplicationArchitectureISBNⅠ企⋯Ⅱ①福⋯②王⋯③周⋯Ⅲ软件工具程序设计应用企业管理ⅣF中国版本图书馆CIP数据核字()第号机械工业出版社(北京市西城区百万庄大街号邮政编码)责任编辑:迟振春印刷年月第版第次印刷mm×mm·印张标准书号:ISBN定价:元凡购本书如有缺页、倒页、脱页由本社发行部调换客服热线:()购书热线:()投稿热线:()读者信箱:hzjsjhzbookcom华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcom“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。”ChristopherAlexander本书是面向对象大师MartinFowler继《AnalysisPatterns》、《UMLDistilled》、《PlanningExtremeProgramming》、《Refactoring》之后的又一力作。“温故而知新”。Fowler在本书中再次向我们证明了《礼记》中这句古训的震撼力他在回头审视自己及同仁多年来从事企业应用开发的经验和教训后归纳总结了多种企业应用架构的设计模式。这些模式从不同层次、不同侧面向我们展示了什么是好的企业应用架构?如何设计好的企业应用?正如作者自己所言企业应用在某些方面比其他软件(如电信通信软件)复杂得多:纷繁复杂的企业数据、“不合逻辑”的业务规则、变化莫测的用户需求等等。环顾四周CORBA、JEE、NET企业应用开发技术可谓“前仆后继、层出不穷”开发平台的种类之多就更不必说。招式套路可以千变万化扎实深厚的“内功”却是始终如一!虽然企业应用涉及的软件技术不断翻新但是基本的架构及设计思想却没有太多变化。将以前行之有效的设计思路和方法加以适当调整并应用到当前的问题上是最高效的做法。在一组专家级合作者的帮助下Martin将多种经常出现的解决方案转化成模式最终融会成这本“内功心法”。在仔细研读、用心揣摩本书之后希望它能够帮助你应对任何一种企业应用平台驾驭任何一种企业应用技术无论是现在的技术还是未来的技术。熟悉Fowler的读者都知道这位大师的写作风格可谓是“深入浅出娓娓道来”。本书也是一样。前章是关于企业应用的背景知识如分层架构、Web表现、业务逻辑、数据库映射、并发、会话、分布策略等等。在此基础上随后的各章分别对与这些背景知识相关的设计模式进行了详细的介绍。与其他设计模式的书一样本书从模式的使用场景、解决方案、UML表示等方面予以介绍详略有致。就连示例的编程语言的选取Java和C#也是与他的写作风格一脉相承的。夜已深窗外依旧是绵绵不断的早春小雨。让我们酌一杯清茶一起来品味大师的话一起来品味“源于实践、指导实践”的苦涩与甘甜“模式的关键点是它们源于实践。必须观察人们的工作过程发现其中好的设计并找出‘这些解决方案的核心’。这不是一个简单的过程但是一旦发现了某个模式它将是非常有价值的。对于我来说价值之一是能够撰写这样一本参考书。你不必通读本书的全部内容也不必通读任何一本有关模式的书。只需要了解到这些模式都是干什么的、它们解决什么问题、它们是如何解决问题的就足够了。这样一旦你碰到类似问题就可以从书中找出相应的模式。译者序华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomIV那时你再深入了解相应的模式也为时不晚。”本书翻译初稿的过程中得到了丁博、王树凤、朱锐、林繁、托明福的大力帮助。王怀民、周斌分别统审了全书。非常感谢UMLChina潘加宇、蒋芳在校对过程中的宝贵意见和建议。译者年月日于长沙不闻不若闻之闻之不若见之见之不若知之知之不若行之荀子华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcom年春天我飞抵芝加哥为ThoughtWorks公司正在开发的一个项目担任顾问。ThoughtWorks是一个规模虽小但正在快速成长的应用开发公司。这个项目属于那种极富挑战性的企业级应用它是一个后端租赁系统。简单说它处理的是租户签字认可后所有与租赁有关的事务包括发送账单、处理某些人对所租房屋资产的改造、追踪那些未按时缴纳账单的租户、指出如果某人提前归还资产应当如何处理等。在你意识到租赁合同极度复杂并且总在不断变化之前这听起来好像并不太难实现。它的业务“逻辑”几乎不能套用任何已有的逻辑模式因为那些“逻辑”归根到底是商人们为争夺生意而制定的一些古怪的小改动都可能对赢得某笔交易起关键作用。因此每次生意上的一点点胜利就意味着系统复杂性的又一次增加。我对此类问题情有独钟:如何捕获这些复杂性并设计一个面向对象的系统来处理它们。事实上我一直坚信面向对象的最大优点在于它能够使复杂逻辑易于处理。为复杂业务逻辑开发一个良好的领域模型很困难但在此问题中却是恰得其所。当然单纯的领域模型也并非灵丹妙药。我们的领域模型必须持久化到数据库中但是与许多项目一样我们当时使用的是关系数据库。我们还必须将该模型与用户界面关联起来还要能支持远程应用程序对本软件的使用同时还必须将我们的软件与第三方的软件包整合。这些工作都基于一种被称为JEE的新技术当时全世界没有人在这一方面有实战经验。虽然JEE是一项崭新的技术但我们仍能从以往的经验中得到帮助。本人曾经长期使用C、Smalltalk和CORBA来开发类似系统。ThoughtWorkers公司中许多人则有Forte方面的经验。可以说当时我们对关键架构已经有了思路所要解决的仅是如何将之转化为JEE实现。现在回过头来看三年前的设计虽然它并不尽善尽美但无疑经受住了时间的考验。上述情况正是我撰写这本书的出发点。多年来我曾看到过许多企业级应用项目。这些项目通常都包含相似的设计思路这些设计思路已经被证明可以有效地处理企业应用中不可避免的复杂性。本书就是将这些设计思路升华为模式的一个起点。本书分为两个部分第一部分是一些叙述性的章节它们主要讨论企业级应用程序设计中的一些重要议题。这些章节介绍了企业级应用程序架构的各种问题并给出了大体的解决方案。而解决方案的细节则在本书的第二部分以模式的方式组织成文。这些模式仅仅是一些参考我并不希望读者一页页地去细读。我的想法是:从头到尾将第一部分的叙述性章节读完然后再根据兴趣和需求翻阅第二部分的有关章节。因此本书是将简短的叙述和详尽的参考合二为一。本书讨论的是企业级应用程序的设计。企业级应用程序涉及大量复杂数据的显示、操纵和存储以及对这些数据进行处理的业务流程的自动化。典型的例子有预订系统、金融系统、物流补给系统以及其他种种驱动现代商业运作的系统。企业级应用和嵌入式系统、控制系统、电信系统或者桌面应用程序不同它们有自己特有的挑战和解决方案。因此如果你在上述那些非企业领域工作本书对你并没有益处(除非想体会一下企业级应用程序是怎么一回事)。如果需前言华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomVI要一本关于软件架构的通用性的书籍我推荐POSA。在构建企业级应用时有许多架构方面的问题。我想本书恐怕很难一一详细列举。在软件开发方面本人是迭代开发方法的忠实信徒。迭代开发的核心在于只要软件对用户有用就应当交付即使这个软件当时并没有完成。虽然著书与编写软件之间存在诸多差异但我认为在这一点上异曲同工。也就是说虽然本书尚不全面但已初具雏形可以为读者提供有关企业级应用程序架构方面的有益建议(至少我认为如此)。本书讨论的主要议题是:•企业级应用程序的分层•构建领域(业务)逻辑•构建基于Web的用户界面•将内存模块(尤其是对象)关联到关系数据库•在无状态环境下处理会话状态•分布原则可能本书未涉及的议题更多。我很想撰写关于组织确认、合并消息和异步通信、安全、错误处理、集群、应用集成、架构重构、构建胖客户的用户界面等方面的书籍或文章。但是由于时空限制以及思路尚未成熟本书将不涉及上述内容。我只能希望在不久的将来能看到一些与这些工作相关的模式。也许我会撰写本书的第卷并加入这些内容或者是由其他人来补遗。当然基于消息的通信是相当重要的问题。在进行多应用程序集成时人们正越来越多地用到异步的、基于消息的通信方法。即便是在同一应用程序内部基于消息的通信也值得费上一些笔墨。本书并非针对某一特定的软件平台。从世纪年代末到年代初我开始在基于Smalltalk、C和CORBA的项目中使用这些模式。而世纪年代后期我在Java方面做了大量的工作我发现这些模式可以很好地应用于较早的JavaCORBA系统和其后基于JEE的工作中。近来我开始在微软的NET平台方面做一些探索我发现这些模式同样有效。ThoughtWorkers公司的同事也介绍了他们的经验尤其是在Forte方面。我不敢说这些模式能够通用于所有已经和即将被用于企业级应用的开发平台但至少到目前为止它们已经表现出足够的可重用性。对于大多数模式本书提供了相应的代码示例。这些例子所用的程序设计语言是我认为大多数读者都能够阅读和理解的语言。Java就是一个很好的选择。只要熟悉C或C就可以读懂Java代码Java远没有C那么复杂。基本上大多数C程序员都能够理解Java但反过来却并非如此。我是面向对象的信徒也就自然更偏爱面向对象的语言。因此大多数代码示例使用的是Java语言。写这本书时微软的NET环境正逐渐成熟它的C#语言与Java有许多相同之处。所以某些代码示例也使用了C#语言虽然这样做会多少有一些风险因为NET尚未得到大量应用使用的术语可能尚未形成惯例。这两种语言都是基于C的语言只要能读懂其中一种即使对另一种语言或平台并不熟悉要读懂它也并非难事。我的目的是使用一种能够让最多的软件开发者读懂的语言即使这种语言并非他们所擅长或偏爱的。(谨向那些喜欢Smalltalk、Delphi、VisualBasic、Perl、Python、Ruby、COBOL或其他语言的读者致歉。我知道你们认为本书的中文版(中译名为“面向模式的软件体系结构”)已由机械工业出版社出版。编辑注华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomVII有比Java或C#更好的语言我也认为如此!)示例是用来阐述和解释模式思想的。它们并非可以直接使用的解决方案任何情况下都需要做一些工作才能将它们用于你的应用程序之中。模式只是一个有益的起点而非最终的解决之道。本书的读者本书面向的是正在构建企业级应用、希望增进对架构相关问题的理解和沟通的编程人员、设计人员和软件架构师。我假定本书的大多数读者可以归为两类:一些人所面对的需求并非大规模的因此准备自己从零开始构建软件另一些人则有大规模的需求将使用某些工具。对于前者我认为本书中提及的模式将有助于工作的启动。尽管在许多领域所需的知识远超出本书中模式所给予的内容但本书提供了一个比我当初进入该领域时更高的起点。对于那些工具的使用者我希望本书能揭开工具的一些内幕帮助他们决策如何选择工具所支持的模式中的哪一种。例如使用对象-关系映射工具同时意味着你必须决定如何映射某些特定情况。本书所提供的模式将有助于你做出这样的决策。当然还可能有第三类读者他们有大规模的需求同时又希望亲自构建软件。在此我首先要忠告他们的是:请先考虑使用已有的工具。我已经见过不止一个项目花费了大量时间来建造框架而这些框架并非该项目所真正要解决的问题。如果你仍固执己见那也只能听天由命。但要记住本书中代码示例为提高可理解性都被有意简化过在实际使用时往往需要对它们大动干戈才能满足要求。由于模式是可复现问题的通用解决方案因此可能有的读者对这些模式已经有所接触。如果你从事企业级应用开发已经有一段时间可能会很熟悉其中大部分模式。本书中并不包含任何新的东西正相反:这是一本关于(我们这一行业的)已有知识的书。如果你是这一领域的新手我希望本书将帮助你学习这些技术。如果你熟悉这些技术我希望本书有助于你与其他人沟通。模式的重要作用就在于其创建了一个通用的词汇表例如你称某个类是远程外观其他设计人员就都知道你指的是什么。致谢与其他书籍一样本节将涉及多年来以不同方式与我一起工作的很多人。他们以许多方式对本书提供过帮助。本书中一些重要内容是由他人提供的其中某些人我可能已经无法回忆起他们的名字。在这里我所能做的是对那些仍铭记在心的人表示感谢。首先要感谢的是我的合作者DavidRice,他是我在ThoughtWorks公司的同事他为本书做出了巨大的贡献:撰写了本书的。当我们一起努力以保证本书能如期交付时(他当时还要从事客户支持的工作)我们曾在若干个深夜通过即时消息进行协商交谈中他坦承他总算明白了为何写一本书是如此困难却又如此吸引人。MattFoemmel是ThoughtWorks公司的另一个同事。尽管他文笔犀利冷峻是本书的一个十分中肯的批评家但他为代码示例做出了很大的贡献。RandyStafford为本书贡献了服务层模式华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomVIII他一直是此模式的极力倡导者。我还要感谢EdwardHieatt和RobMee所做的贡献特别是Rob在复审本书时所发现的缺失。Rob是我的最佳审阅者:他不仅发现少了某些内容而且他还帮我写了一节来弥补这个缺失!同样对本书一流的正式审阅者我的言辞远不能表达我的感激之情:我几乎要把ThoughtWorks公司的电话号码簿列在此处了因为太多同事与我讨论过他们的设计和经验在这一项目上帮助过我。许多模式在我脑中成型是因为我有机会与众多天才设计师讨论因此我只好对整个公司表示感谢。KyleBrown、RachelReinitz和BobbyWoolf在百忙之中抽出时间与我一道在北卡罗来纳对本书进行了长期而细致的审阅。他们在本书中注入了他们睿智的光芒。尤其是与Kyle的几次长时间的电话交谈令我获益匪浅。年初我与AlanKnight和KaiYu一起为JavaOne大会准备了一个演讲这是本书最初的雏形。在对他们所提供的帮助致谢的同时我还要感谢JoshMackenzie、RebeccaParsons和DaveRice他们其后协助我提炼了这些演讲及其思想。JimNewkrik付出了很大努力协助我熟悉NET平台。我与这个领域的许多专家有过令人惬意的交谈或合作从而在他们身上学到了不少东西。尤其想对ColleenRoe、DavidMuirhead和RandyStafford表示感谢他们将自己在Gemstone的Foodsmart示例系统上的工作成果与我共享。我在BruceEckel所主持的CrestedButte讨论会上也参与过一些重要的会谈因此应当向近年来这一会议的与会者致谢。JoshuaKerievsky虽然没有时间对本书做一次全面的审阅但他是模式方面的一个优秀顾问。我还从UIUC阅读组那里获得了相当大的帮助他们作为读者对本书提出了坦诚的批评。我要感谢:ArielGertzenstein、BoskoZivaljevic、BradJones、BrianFoote、BrianMarick、FedericoBalaguer、JosephYoder、JohnBrant、MikeHewner、RalphJohnson和WeerasakWitthawaskul。前UIUC成员DragosManolescu及其小组给了我一些反馈。感谢MuhammadAnan、BrianDoyle、EmadGhosheh、GlennGraessle、DanielHein、PrabhaharanKumarakulasingam、JoeQuint、JohnReinke、KevinReynolds、SripriyaSrinivasan和TirumalaVaddiraju。KentBack为我提供了许多思路尤其是他为特殊情况模式所起的名字。JimOdell将我领入了顾问咨询、教学和写作的世界我由衷地感谢他。当我写这本书时曾将草稿放在Web上。期间许多人通过电子邮件向我指出问题、提出疑问或者讨论其他替代方案。他们中有MichaelBanks、MarkBernstein、GrahamBerrisford、BjornBeskow、BryanBoreham、SeanBroadley、PerisBrodsky、PaulCampbell、ChesterChen、JohnCoakley、BobCorrick、PascalCostanza、AndyCzerwonka、MartinDiehl、DanielDrasin、Juan华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomIXGomezDuaso、DonDwiggins、PeterForeman、RussellFreeman、PeterGassmann、JasonGorman、DanGreen、LarsGregori、RickHansen、TobinHarris、RusselHealey、ChristianHeller、RichardHenderson、KyleHermenean、CarstenHeyl、AkiraHirasawa、EricKaun、KirkKnoernschild、JesperLadegaard、ChrisLopez、PaoloMarino、JeremyMiller、IvanMitrovic、ThomasNeumann、JudyObee、PaoloParovel、TrevorPinkney、TomasRestrepo、JoelRieder、MatthewRoberts、StefanRoock、KenRosha、AndySchneider、AlexandreSemenov、StanSilvert、GeoffSoutter、VolkerTermath、ChristopherThames、VolkerTurau、KnutWannheden、MarcWallace、StefanWenig、BradWiemerslage、MarkWindholtz、MichaelYoon。此外还有许多我不认识或已经遗忘了的人在此要向他们表达同样真诚的谢意。最诚挚的谢意依旧要献给我的妻子Cindy她与我同历风雨我将永远铭刻在心。华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomActiveRecord(活动记录):包装数据库表或视图中的行、封装数据库访问、并将业务逻辑加到该数据上的对象。ApplicationController(应用控制器):处理屏幕导航和应用流程的集中控制点。AssociationTableMapping(关联表映射):将关联存储为表形式并通过外键将与之相关的表连接起来。ClassTableInheritance(类表继承):表示了类的继承层次每个类都对应一个表。ClientSessionState(客户会话状态):将会话状态存储于客户端。CoarseGrainedLock(粗粒度锁):用一个锁将一组相关对象都锁起来。ConcreteTableInheritance(具体表继承):表示了类的继承层次层次中的每一个具体类对应一个表。DataMapper(数据映射器):由映射器组成的一个层次它在对象和数据库之间移动数据并保证它们之间相互独立、映射器间相互独立。DataTransferObject(数据传输对象):在进程间进行数据传递的对象目的是减少进程间方法调用的次数。DatabaseSessionState(数据库会话状态):将会话状态作为提交的数据存储于数据库中。DependentMapping(依赖映射):让一个类为一个子类进行数据库映射。DomainModel(领域模型):既包含行为又包含数据的领域的对象模型。EmbeddedValue(嵌入值):将一个对象映射到另一个对象的表的多个域中。ForeignKeyMapping(外键映射):将对象间的一个关联映射成表间一个外键引用。FrontController(前端控制器):处理Web站点中所有请求的控制器。Gateway(入口):封装对外部系统或资源进行访问的对象。IdentityField(标识域):将数据库ID域保存到对象中用来维护一个内存对象与一个数据库行之间的对应关系。IdentityMap(标识映射):通过将每个被加载对象放入一个映射中确保每个对象都被加载且仅加载一次。当引用对象时使用映射来查找对象。ImplicitLock(隐含锁):允许框架或层超类型申请离线锁。InheritanceMappers(继承映射器):组织数据库映射器的一种结构能处理继承层次。LayerSupertype(层超类型):某一层中充当所有类型的超类型的类型。LazyLoad(延迟加载):对象中并不包含所有想要的数据但是知道如何获取这些数据。Mapper(映射器):在两个独立对象间建立起通信的对象。MetadataMapping(元数据映射):在元数据中保存对象-关系映射的细节。ModelViewController(模型-视图-控制器):将用户界面交互分割成三个不同的角色。模式列表华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomXIMoney(货币):表示货币值。OptimisticOfflineLock(乐观离线锁):通过检测冲突并回滚事务来防止并发业务事务间的冲突。PageController(页控制器):处理Web站点中特定页面请求或动作的对象。PessimisticOfflineLock(悲观离线锁):通过每次只允许一个业务事务访问数据来防止并发业务事务间的冲突。Plugin(插件):在配置阶段而不是在编译阶段连接类。QueryObject(查询对象):表示数据库查询的对象。RecordSet(记录集):列表数据的内存表示。Registry(注册表):其他对象可以通过其找到公共对象或服务的一个知名对象。RemoteFaçade(远程外观):在细粒度对象上提供粗粒度的外观以改进跨网络的有效性。Repository(资源库):通过用来访问领域对象的一个类似集合的接口在领域与数据映射层之间进行协调。RowDataGateway(行数据入口):在一个数据源中充当到一条记录的入口的对象。每条记录(数据库行)对应一个对象实例。SeparatedInterface(分离接口):在一个与其实现分离的包中定义一个接口。SerializedLOB(序列化LOB):通过序列化方法将一张对象图保存在一个大对象(LOB)中然后将大对象存储在数据库的域中。ServerSessionState(服务器会话状态):将会话状态以序列化方式保存在一个服务器系统上。ServiceLayer(服务层):通过一个服务层来定义应用的边界这个服务层建立了一组可用操作并协调应用程序对每个操作请求的响应。ServiceStub(服务桩):在测试过程中去除对有问题服务的依赖。SingleTableInheritance(单表继承):通过一个表来表示类的一个继承层次表中各列对应不同类中的所有域。SpecialCase(特殊情况):为特定情况提供特殊行为的一个子类。TableDataGateway(表数据入口):充当到数据库表的入口的对象。一个实例处理表中的所有行。TableModule(表模块):通过一个实例处理数据库表或视图中所有行的业务逻辑。TemplateView(模板视图):通过在HTML页面中嵌入标记来将有关信息融入HTML。TransactionScript(事务脚本):通过过程来组织业务逻辑。其中每个过程处理来自表现层的一个请求。TransformView(转换视图):逐条处理领域数据并将它们转换成HTML的一个视图。TwoStepView(两步视图):通过两步将领域数据转换成HTML:首先形成某种逻辑页面然后将逻辑页面转换成HTML。UnitofWork(工作单元):维护由业务事务所影响的对象列表并协调更改的写出以及并发问题的解决。ValueObject(值对象):类似于金钱或数据范围的、小而简单的对象其相等性不是基于ID的。华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcom译者序前言模式列表引言⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯架构⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯企业应用⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯企业应用的种类⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯关于性能的考虑⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯模式的结构⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯模式的局限性⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第一部分表述第章分层⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯企业应用中层次的演化⋯⋯⋯⋯⋯⋯⋯⋯三个基本层次⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯为各层选择运行环境⋯⋯⋯⋯⋯⋯⋯⋯⋯第章组织领域逻辑⋯⋯⋯⋯⋯⋯⋯⋯⋯抉择⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯服务层⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章映射到关系数据库⋯⋯⋯⋯⋯⋯⋯架构模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯行为问题⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯读取数据⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯结构映射模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯关系的映射⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯继承⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯建立映射⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用元数据⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯数据库连接⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯其他问题⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章Web表现层⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯视图模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯输入控制器模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章并发⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯并发问题⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯执行语境⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯隔离与不变性⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯乐观并发控制和悲观并发控制⋯⋯⋯⋯⋯避免不一致读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯死锁⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯事务⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ACID⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯事务资源⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯减少事务隔离以提高灵活性⋯⋯⋯⋯业务事务和系统事务⋯⋯⋯⋯⋯⋯⋯离线并发控制的模式⋯⋯⋯⋯⋯⋯⋯⋯⋯应用服务器并发⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章会话状态⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯无状态的价值⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯会话状态⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯存储会话状态的方法⋯⋯⋯⋯⋯⋯⋯⋯⋯第章分布策略⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯分布对象的诱惑⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯远程接口和本地接口⋯⋯⋯⋯⋯⋯⋯⋯⋯必须使用分布的情况⋯⋯⋯⋯⋯⋯⋯⋯⋯关于分布边界⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯分布接口⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章通盘考虑⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯从领域层开始⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯深入到数据源层⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯目录华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomXIII事务脚本的数据源⋯⋯⋯⋯⋯⋯⋯⋯表模块的数据源⋯⋯⋯⋯⋯⋯⋯⋯⋯领域模型的数据源⋯⋯⋯⋯⋯⋯⋯⋯表现层⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一些关于具体技术的建议⋯⋯⋯⋯⋯⋯⋯Java和JEE⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯NET⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯存储过程⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯WebServices⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯其他分层方式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第二部分模式第章领域逻辑模式⋯⋯⋯⋯⋯⋯⋯⋯⋯事务脚本(TransactionScript)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯收入确认问题⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:收入确认(Java)⋯⋯⋯⋯⋯⋯⋯领域模型(DomainModel)⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:收入确认(Java)⋯⋯⋯⋯⋯⋯⋯表模块(TableModule)⋯⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:基于表模块的收入确认(C#)⋯服务层(ServiceLayer)⋯⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:收入确认(Java)⋯⋯⋯⋯⋯⋯⋯第章数据源架构模式⋯⋯⋯⋯⋯⋯⋯表数据入口(TableDataGateway)⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:人员入口(C#)⋯⋯⋯⋯⋯⋯例:使用ADONET数据集(C#)⋯行数据入口(RowDataGateway)⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:人员记录(Java)⋯⋯⋯⋯⋯⋯例:领域对象的数据保持器(Java)⋯活动记录(ActiveRecord)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:一个简单的Person类(Java)⋯数据映射器(DataMapper)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:一个简单的数据映射器(Java)⋯例:分离查找方法(Java)⋯⋯⋯⋯例:创建一个空对象(Java)⋯⋯⋯第章对象-关系行为模式⋯⋯⋯⋯⋯工作单元(UnitofWork)⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:使用对象注册的工作单元(Java)⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯标识映射(IdentityMap)⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:标识映射中的方法(Java)⋯⋯延迟加载(LazyLoad)⋯⋯⋯⋯⋯⋯⋯运作机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:延迟初始化(Java)⋯⋯⋯⋯⋯例:虚代理(Java)⋯⋯⋯⋯⋯⋯⋯例:使用值保持器(Java)⋯⋯⋯⋯例:使用重影(C#)⋯⋯⋯⋯⋯⋯第章对象-关系结构模式⋯⋯⋯⋯⋯标识域(IdentityField)⋯⋯⋯⋯⋯⋯⋯工作机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomXIV例:整型键(C#)⋯⋯⋯⋯⋯⋯⋯例:使用键表(Java)⋯⋯⋯⋯⋯⋯例:使用组合键(Java)⋯⋯⋯⋯⋯外键映射(ForeignKeyMapping)⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:单值引用(Java)⋯⋯⋯⋯⋯⋯例:多表查询(Java)⋯⋯⋯⋯⋯⋯例:引用集合(C#)⋯⋯⋯⋯⋯⋯关联表映射(AssociationTableMapping)⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:雇员和技能(C#)⋯⋯⋯⋯⋯例:使用直接的SQL(Java)⋯⋯⋯例:用一次查询查多个雇员(Java)⋯依赖映射(DependentMapping)⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:唱片和曲目(Java)⋯⋯⋯⋯⋯嵌入值(EmbeddedValue)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:简单值对象(Java)⋯⋯⋯⋯⋯序列化LOB(SerializedLOB)⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:在XML中序列化一个部门层级(Java)⋯⋯⋯⋯⋯⋯⋯⋯单表继承(SingleTableInheritance)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:运动员的单表(C#)⋯⋯⋯⋯从数据库中加载对象⋯⋯⋯⋯⋯⋯类表继承(ClassTableInheritance)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:运动员和他们的家属(C#)⋯具体表继承(ConcreteTableInheritance)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:具体运动员(C#)⋯⋯⋯⋯⋯继承映射器(InheritanceMappers)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章对象-关系元数据映射模式⋯⋯元数据映射(MetadataMapping)⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:使用元数据和反射(Java)⋯⋯查询对象(QueryObject)⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:简单的查询对象(Java)⋯⋯⋯资源库(Repository)⋯⋯⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:查找一个人所在的部门(Java)⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:资源库交换策略(Java)⋯⋯⋯第章Web表现模式⋯⋯⋯⋯⋯⋯⋯⋯模型-视图-控制器(ModelViewController)⋯⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯页面控制器(PageController)⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:Servlet控制器和JSP视图的简单演示(Java)⋯⋯⋯⋯⋯⋯⋯例:使用JSP充当处理程序(Java)⋯例:代码隐藏的页面控制器(C#)⋯前端控制器(FrontController)⋯⋯⋯华章IT周年《企业应用架构模式》互动网首发http:wwwchinapubcomXV运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:简单的显示(Java)⋯⋯⋯⋯⋯模板视图(TemplateView)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:分离的控制器使用JSP充当视图(Java)⋯⋯⋯⋯⋯⋯⋯⋯例:ASPNET服务器页面(C#)⋯转换视图(TransformView)⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:简单的转换(Java)⋯⋯⋯⋯⋯两步视图(TwoStepView)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:两阶XSLT(XSLT)⋯⋯⋯⋯⋯例:JSP和定制标记(Java)⋯⋯⋯应用控制器(ApplicationController)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:状态模型应用控制器(Java)⋯第章分布模式⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯远程外观(RemoteFacade)⋯⋯⋯⋯⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:使用Java语言的会话bean来作为远程外观(Java)⋯⋯⋯例:WebService(C#)⋯⋯⋯⋯⋯数据传输对象(DataTransferObject)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯进一步阅读⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯例:传输唱片信息(Java)⋯⋯⋯⋯例:使用XML实现序列化(Java)⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯第章离线并发模式⋯⋯⋯⋯⋯⋯⋯⋯乐观离线锁(OptimisticOfflineLock)⋯运行机制⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯使用时机

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/10

企业应用架构模式

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利