===============================================
为以前公司准备的框架开发讲座的文档,现在放出来,希望对大家有所帮助吧!专门讲框架开发的资料也只有【应用框架的设计与实现】和【Framework的设计与应用】,东摘抄西摘抄就有了如下的文章,关于框架开发的技术这里只列出了大纲,感兴趣的可以去看看【应用框架的设计与实现】,对书的作者除了佩服还是佩服啊!
参考或抄袭资料^-^:
| 书名 | 作者 | 译者 |
| 应用框架的设计与实现 | Xin Chen | 温昱 靳向阳 |
| Framework的设计与应用 | 黄忠成 | |
| 企业应用架构模式 | Martin Flower | 王怀民 周斌 |
| . NET企业服务框架 | Christian Nagel | 夏桅 金雪根 |
术语“框架”对不同的人,含义不同,政治家用这个词描述某些政策和解决问题的某些措施;建筑师用这个词描述建筑物的骨架或结构;软件架构师用这个词描述有助于软件应用开发的一组可重用的设计和代码。
“结构”一词反映了任何框架的本质。结构无处不在。当开始建筑一座新的建筑物时,你会观察到,它的结构先被搭建。当你写文章或者书籍的时候,你也首先要为你所讨论的内容拟订一个结构,或者称为提纲。通过搭建一个“结构”,可以迫使你着眼全局。对建筑来说,着眼全局将迫使建筑师深入考虑:建筑物的每一部分会如何影响其他每一部分。对写文章来说,着眼全局会迫使你去考虑如何组织每一个主题和文字,才能使读者理解。
结构在应用开发中扮演了重要角色,一个相当复杂的应用包含了如此之多不断变化的细节部分,以至人们无法把握它们的复杂关系,而结构帮助我们将这些不断变化的细节部分,组织成易于理解的少数几个主要部分。在开发应用时,结构能为我们提供进一步的上下文。应用框架为开发者提供了结构和模板,开发者以此为基线来构建他们的应用系统。这样一个框架通常会包含抽象类,具体类和类之间的预定义交互。开发者在框架之上构建应用,通过重用框架提供的代码和设计,减小了开发工作量,下图概括了应用框架和应用的关系。

虽然框架概念在用户界面开发中被广泛采用,但是它并不局限于用户界面框架,框架概念也用于通用应用开发。最早的非用户界面框架是Taligent公司开发的CommonPoint,它旨在减少应用开发的工作量,其方法是为开发者提供一个综合编程环境,类似于现在包括Java语言和运行时虚拟机的Java环境。
Sun公司的Java环境和Microsoft公司的.NET环境,不仅提供了新型的语言和虚拟机,还提供了它们自己的框架。在过去几年中,使用Java或者.NET的开发者能够充分感觉到这两种框架为应用开发所带来的好处。Java和.NET都是旨在支持所有业务类型的应用系统的通用框架。因此,它们不能包含任何业务领域相关的类和设计。然而,基于这些通用框架之上的业务框架,可以为很多特定业务领域提供相关服务和专门支持。
IBM也开发了自己的面向业务领域的框架,被称为San Francisco项目,它是用Java开发的,由针对不同业务领域的应用框架组成,例如,定单管理,仓库管理,财务管理等。与Java和.NET这些通用框架不同, San Francisco 框架是专门为特定业务领域设计的.
类库和框架的这种区别如下图:

E:可维护性
可维护性是业务需求改变之后,其应用便于修改的能力,它是代码重用带来的一个受欢迎的效用。框架组件通常会被多个应用或单个应用中的不同部分共享。只保留一份框架代码库使得应用易于维护,因为当需求改变时,你只需改变一次,应用框架也肯能包含多个层,每一层关于应用要支持的业务都有某写假设。其中,最低层包含了没有任何业务假设的框架组件,它们是框架中最通用的组件;层次越往上,某组件依赖的业务假设越多,因此也对业务需求和业务规则的变化越敏感。每当变化发生时,只有那些业务假设没被打破的层中的组件需要被修改和测试。因此,让框架的不同层包含不同级别的业务知识,能够减少因改变业务需求和业务规则所带来的连锁反应。这也使得维护成本减低,因为只需维护因业务规则改变所影响到的代码。
框架的的设计者必须决定:应用开发者如何从框架提供的服务和架构中获益;如何去抽象应用中特定的通用逻辑,以使开发者通过框架重用这些逻辑;如何在框架的恰当处提供扩展点,以使开发者能插入代码获得特定结果。开发框架的一些工作是很抽象的,并且严重依赖于一个前提:应用开发者将如何使用框架构建应用。
一开始把所有的问题全部搞清楚是很困难的。因为在设计时只能猜测:最终应用是什么样子,又是如何被构建以解决业务问题的?有的框架组件,最初认为将被应用的多个部分分享,但最终不是如此。有的代码段,可能最初被认为是某一个应用独有的,应该放到应用层,结果却发现被整个应用所共享,需要提取抽象,放到框架层中去。在开始框架以后,新的业务需求或变更了的需求可能导致两种情况:新的框架组件加入,或者现存的框架组件修改。
所以,为了使框架适应将要在其上开发的应用的需求,框架开发过程要经过一系列的迭代周期开发,所以框架的开发和常规的应用开发类似,需要反复的进行分析,设计,实现和稳定的工作。
也就是说,对于整个项目而言是好事,而对应用开发层面的程序员来说确是种束缚,如果程序员的层次比较低或者大局观比较差,就会出现项目开发完了,但是感觉自己的水平增长很少,我想这也就是大多数国人在日本公司呆了几年,然后感觉没学到多少东西的原因吧。但是当你努力的去研读框架的代码和文档的时候,你就进入另外一个境界了。关于研读框架的代码所带来的好处,在优快云最新有一篇文章就是说这个的,大家可以找来读读。
但是,学习框架是一个耗时的过程。大家都是用C#做应用开发的,想想Microsoft庞大的MSDN文档学习和查阅就知道了。
框架天生就不是完整的应用,其中缺少的部分需要开发者编写应用层代码来补充。在应用开发完成以前,对许多开发者来说,框架本身可能不太容易理解,因为框架的每一部分与其他部分的交互关系,并非自始至终都很明显。
框架中包含很多控制整个框架处理流程所必须的总控代码。尽管框架的目的之一就是把这些复杂的控制逻辑对开发者隐藏起来,但是在培训时候,开发者还是应当理解框架是如何工作的。因为框架中的很多控制逻辑以及类之间的依赖关系,并非直截了当,而且比较复杂,所以理解框架的工作原理并非易事。
应用框架提供了新的编程模型,它包含了很多开发者陌生的API,服务和配置项。开发者需要花些功夫学习应用框架,才能流畅使用它,最终高效的在其上开发应用。
尽管学习曲线是要经历的,但我们可以通过完善的文档,以及演示如何在各种场景使用框架的范例,来加快开发者掌握应用框架的速度。对于编程来说,一个范例的效果胜过千言万语。
大可不用的情况:你希望投入有限的费用并快速开发出解决方案,这时可能使用框架节约的成本还没有开发框架投入的成本多。
相反:也有这种情况,应用框架被多个应用共享,从而总的开发成本显著减少。
还有:你希望今天在应用框架上投资,以为将来的开发提供一个可扩展和可重用的基础平台。
总之,就是看应用框架是否有助于你到达到目的的预期目标。
开发应用框架就象在股市投资:好的投资对你的投资目标有利,而不是看它们今天是否赚钱。
可能有人看了上面的描述,要说了,这些可能离我们太遥远了,因为我们是做应用开发的,并不是做框架开发的,其实一切并不遥远。
程序语言发展到现在,经历了很多种演变:汇编-->结构化语言à基于对象的à面向对象[多继承—>单继承]。从另外一条线走:内存自己释放的-->内存自管理的。
那么从软件开发的演变来看:没有过程没有类-->只有函数-->既有函数又有对象-->只有对象。然后就是设计模式,重构,一切的一切都是围绕着如何高效的开发,如何减低开发成本,如何使加入团队中的开发人员尽快熟悉业务,熟悉开发流程,如何减低维护成本来的。
而框架开发是我所知道的最高阶的重用技术,或者说是最高阶的开发境界。虽然我们并不需要有框架开发的能力,但是框架开发的境界还是需要的,因为高屋建瓴,才能够运筹帷幄,决胜千里。
很多时候你也许会奇怪为什么那些技术大拿,会精通那么多语言,一门技术出现了,他们会很快适应并且精通,因为他们是站在框架的角度去考虑和学习的。
从软件工程的角度来考虑,如果一个项目应用了框架技术,那么首先开发成本会降低,因为应用是基于框架的,流程一致,那么问题出现也一致,对应的测试也很好做。而且方便做一些通用的代码生成工具或者配置生成工具。项目新人只要熟悉一个小应用,就可以熟悉适应整个大的应用。维护成本也会相应的减低,因为框架一致,所以技术很单一,技术相对弱的就可以维护,而且很轻松。
刚才我们已经提到,应用框架是个应用的“半成品”,它能作为一个业务应用的起点。基于框架的应用又两层组成:应用层和框架层。框架层可能包含众多组件。这些组件可以被划分为两类:特定领域组件和跨领域组件。下图展示了不同组成部分以及它们之间的关系:

我们可以把特定领域框架层想象成一个国家的宪法,而把业务应用想象成某个洲或者地方政府的法律。只要和宪法保持一致,一个州可以自由定制适合该州情况的法律。和宪法类似,特定领域层并不规定每个业务应用该怎么构建;它提供一组组件,这些组件封装了特定业务领域的核心业务特征和过程。例如:对于一个在线B2C 业务领域而言,购物车组件就是特定领域框架的组件,该组件负责描述客户选购的商品项,每项的数量和选购时间。不同的在线购物网站可以在不同的场景以不同的方式来使用这个购物车组件,但是都有个共同的特点:都需要一个对象提供诸如客户选购的商品项,每项的数量和选购时间这些信息。
尽管开发该层的时候,软件架构技能是很重要的,但专业知识对该层的成功尤其关键。
我们期望,特定领域框架层所包含的业务领域知识,比业务应用层的业务知识稳定的多。我们期望,当业务应用层的业务规则发生变化时,特定领域层能够很少变化或者不变化。
不同业务领域的应用有很多共同的主题,这些公共主题可以被“打包”成跨领域框架层。
例如:每一个应用都需要某种管理信息的功能,这些配置信息必须能被应用的不同部分所使用。如果已经有了这样的一个配置服务和架构,则众多不同业务领域的应用就不用投入精力去重复开发了。
再例如,在分布式环境下,一个应用常常需要和另一个系统中的应用通信。所以,一个现成可用的,在不同应用之间传递信息的事件通知服务,将对开放式应用大有好出。所以不难明白,如果能在不同应用中识别出这些公共主题,并进一步开发出相关的服务和组件去满足这些公共需求,我们就能显著提高代码和设计的重用性。
跨领域框架层的开发者需要具备的条件:开发过很多应用,对软件设计有深入的理解。他们应当知道那些是众多应用中的通用功能。他们不必太了解业务,但他们必须有优秀的面向对象的技能,只有这样,他们开发出的框架,才能让应用层的开发人员很容易地插入业务逻辑,以解决特定应用的问题。
既然跨领域框架层并不包含特定的业务领域知识,就可以把它看作是大部分应用所通用的。所以,改变业务规则和业务需求,并不会影响跨领域框架层。然而,在开发过程中,如果认定出现了新的公共主题,跨领域框架层就会受到影响,因为这个需要在跨领域框架层。
Domain Application FrameWork相当于上面的应用框架 [Application Framework] 层:
| Base FrameWork | API,Runtime |
| Application FrameWork | MFC,OWL,VCL,JFC,WinForm,ASP.NET |
| Domain Application FrameWork | 进销存/会计用/医疗软件用FrameWork等 |
C:Domain Application FrameWork:
这个框架的主要功能是什么?
这个框架将要支持什么类型的业务应用?
考虑开发者如何在这个框架的基础上开发他们的业务应用?
这个框架能够支持那些业务领域?
在分析阶段,我们还需要制定出逐步改进框架的跌代计划。我们还需要起草项目计划,并确定每个阶段主要里程碑的时间和文档。
在设计阶段,也可以创建应用框架原型,然后在其上构建一个样本应用;通过该样本应用测试应用框架原型,有帮于你了解所开发的框架如何用于构建业务应用,并洞察到框架设计中潜在的可改进之处。
三:实现:
该阶段主要是框架的编码实现阶段。在规定的时间内,开发一个满足需求的框架。
这个阶段大体和常规应用开发一样,区别在框架的单元测试远没有业务应用的单元测试那么直接,因为此时,使用框架的应用甚至还没有创建,所有应用的业务数据也都没有发生。
I:在无需过多了解其他层次的基础上,可以把某一层作为一个有机整体来理解。例如:无需知道以太网的工作细节,你照样可以在TCP上构建FTP服务。
II:可以替换某层的具体实现,只要前后提供的服务相同即可。例如:FTP服务无论是在以太网,PPP上,还是网络运营商使用的任何网络上都无需改变,而且与提供传输电缆的网络运营商无关。
III:可以将层次间的依赖减到最低。假设网络运营商改变了物理传输系统,但只要IP层不变,FTP服务就可以不改变。
VI:分层有利于标准化工作。TCP和IP就是关于它们各自层次如何工作的标准。
V:一旦构建了某一层次,就可以用它为很多上层服务提供支持。因此,TCP/IP同时被FTP,telnet,HTTP使用。否则,所有这些高层协议都必须编写它们各自的底层协议。
I:把代码分离到用户界面组件,业务组件以及数据库组件之后,应用程序就能扩展到支持成百上千个用户了。用户数量不多时,你可以把所有的组件都放在一个系统内运行,但随着用户量的增长,你也可以随时把这些组件分布到多个系统中。
II:如果业务逻辑发生改变,而业务组件是运行在服务器系统上的话,你就不用再给每个客户端系统重新部署应用程序了—你只需要更新服务器系统即可。
III:你不用再为所有的客户端系统安装和维护数据库驱动程序了—因为只有数据访问组件需要对数据库进行访问(而它很可能只是运行在一台中间层服务器上);
VI:多个用户可以共享数据库连接—因为这些连接不是直接由客户端系统直接建立的,而是由一台中间层服务器建立的。
V:你可以把应用程序划分为不同的部分,以便不同国家和地区的用户通过低速网络也能运行应用程序
VI:通过把应用程序分解为多个组件,你可以更容易地把开发任务分配给多个开发人员开发。
VII:你可以在多个应用程序之间重用代码。
B:分层的坏处:
[企业应用架构模式]中如是说:
I:层次并不能封装所有东西。有时它会为我们带来级联修改。最经典的例子就是在一个分层设计的企业应用中,如果要增加一个在用户界面上显示的数据域,就必须在数据库中增加相应的字段,还必须在用户界面和数据库之间的每一层做相应的修改。
II:过多的层次会影响性能。在每一层,一般都会从一种表现形式转换到另一种。不过底层功能的封装通常带来比代价更大的效率提升。例如,可以优化事务控制层,提高其他各层的效率。
注意:分层架构中最困难的问题是决定建立哪些层次以及每一层的职责是什么。
二:框架开发与UML:
B:扩展点
C:设计模式
D:重构
B:白盒框架
C:灰盒框架
3万+



被折叠的 条评论
为什么被折叠?



