atitit.提升研发效率的利器---重型框架与类库的差别与设计原则
atitit.提升研发效率的利器---重型框架与类库的差别与设计原则
1. 框架的意义---设计的复用
架和类库等概念的出现都是源于人们对复用的渴望。“不要反复发明轮子”。成了软件界的一句经典名言。
从最初的单个函数源码的复用,
到面向对象中类的复用 (通常以类库的形式体现),
再到基于组件编程中二进制组件(.NET中是以IL程序集形式存在的)的复用。人们复用软件的抽象层次越来越高。
如今,框架复 用是抽象层次的又一提升,框架的复用不不过功能的复用,更是设计的复用。
作者:: 老哇的爪子 Attilax 艾龙。 EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
1.1. 重型框架就是it界的重武器。
2. 框架 VS. 库 可视化图形化
框架和库有什么差别呢?两者的主要不同之处在于怎样使用它们以及编写什么样的代码。
· 框架——框架控制了系统的执行。并定义了扩展点 (接口)来让用户进行实施。
· 库——库把系统执行控制权交给用户,并定义了功能和类型供用户使用。
框架和库之间的差别可用上图表示。框架定义了一个结构,你不得不将其填充好;而库则须要你环绕其提供的结构进行编码。
2.1. 类库
1.目的:让程序猿拿现成类来诞生对象。类并未预留空间给程序猿来修正。
2.2. 应用框架
2.应用框架中的类的函数,常调用应用程序中的函数。
3.含有类之间的关系,其预设了对象间的相互合作关系。
4.物件常含预设计行为(Default Behavior),预设行为可让应用程序猿修正之。
2.3. 框架与类库的差别主要表如今下面几个方面:
(1)从结构上说,框架内部是高内聚的,而类库内部则是相对松散的。
(2)框架封装了处理流程的控制逻辑。而类库差点儿不涉及不论什么处理流程和控制逻辑。
正是由于框架对处理流程的控制逻辑进行了封装,才使得框架成为一个应用的骨架。框架中的处理流程和控制逻辑须要经过精心的设计,由于全部使用了该框架的应用程序都会复用该设计。
(4)框架专注于特定领域,而类库却是更通用的。
框架着力于一个特定领域的解决方式的完整表达,而类库差点儿不针对不论什么特定领域
(5)
(5)框架通常建立在众多类库的基础之上。而类库一般不会依赖于某框架。
2.4. 框架模式就是參团游,而自由行则类似于库的组合
本文着重从可组合和避免回调方面对库和框架进行比較。
进一步说,框架模式不仅存在于软件。在日常生活也是常常遇到的。
比如參团游。从一開始,交通、住宿、 游玩行程等都已经被固定了;而自由行则类似于库的组合,不论什么细节都须要亲力亲为,从而实现全权控制。
尽管參团游非常方便,可是对于我。特别是软件开发,我还 是更倾向于我的地盘我做主
3. 框架的特点
3.1. 没有一个万能的框架
能够应用于全部种类的领域和应用,框架的目标性很强。它专注于解决某一特定领域的问题。并致力于为这一特定领域提供通用的解决方式。
3.2. 框架是不可组合的
框架最大最显著的弱点是不可组合。假设你正在使用两个框架,这两者之间往往是非常难兼容的。谁包括谁。谁是谁的外延也是不清晰的。
假设是库,情况则有所不同。由于你才是决策人,所以可以同一时候调用不同的库,尽管这会添加一定的编程复杂度。但至少是可以实现的。
3.3. 框架设计的俩个方向::全栈式与精细化
4. 框架设计经验、原则
使用接口,保证框架提供的全部重要实现都是能够被替换的。
(4)提供一个经常使用的骨架。可是不要固定骨架的结构。使骨架也是能够组装的。
(5)注意平衡,一个框架越来越具体。就会越来越不通用。。
(6)“按需所取”的原则,
弱侵入性的
所谓“弱侵入性”,採用了框架的应用程序能够尽可能的以普通的方式来编写应用逻辑,而不必为了适应框架不得不使用一些特殊的手法。
弱侵入性意味着框架相应用逻辑的干扰更少。因为应用逻辑类都是普通的类,这很方便应用逻辑在另外一个程序中复用,而另外的程序可能採用了一个全然不同的框架。
4.1. 通用框架与应用框架
假设要对框架进行进一步分类,则能够依据框架针对的领域是否具有通用性而将它们分为通用框架(General Framework)和应用框架(Application Framework)。通用框架能够在不同类型的应用中使用,而应用框架仅仅被使用于某一特定类型的应用中。
比方。ORM框架NHibernate就是一个通用框架,该框架能够用于全部须要解决O/R映射的各种类型的应用中。
而某个金融框架则是一个应用框架,它只被用于金融类型的应用中。
(7)
4.2. 选择框架还是库。。
可组合的库
· 设计可组合的库
对于库来说。可组合属性是我们选择它而不是框架的原因之中的一个。
5. 參考
函数式语言库模式:框架是魔鬼?-CSDN.NET.htm
框架? - zhuweisky - 博客园.htm
atitit.提升研发效率的利器---重型框架与类库的差别与设计原则的更多相关文章
- atitit.提升研发效率的利器---重型框架与类库的区别与设计原则
atitit.提升研发效率的利器---重型框架与类库的区别与设计原则 1. 框架的意义---设计的复用 1 1.1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 2.1 ...
- atitit.提升研发管理的利器---重型框架 框架 类库的区别
atitit.提升研发管理的利器---重型框架 框架 类库的区别 1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 3. 应用框架 1 4. 类库 2 5. 框架是不可 ...
- atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较
atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...
- atitit.提升开发效率---mda 软件开发方式的革命--(2)
atitit.提升开发效率---mda 软件开发方式的革命--(2) 1. 一个完整的MDA规范包含: 1 2. 一个完整的MDA应用程序包含: 1 3. MDA能够带来的最大的三个好处是什么? 2 ...
- atitit.提升开发效率---mda 软件开发方式的革命
atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...
- atitit.提升开发效率---使用server控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比較
atitit.提升开发效率---使用server控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比較 例如以下列举了server控件生命周期所要经历的11个阶段. (1)初始 ...
- Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结 1. 管道抽象 1 2. 层次结构抽象(json,xml etc) 1 3. 异步抽象promise 1 4. Ide ...
- atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表
atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表 1. 建模在后自动建表 1 1. 传统上,需要首先建表,在业务编码.. 1 2. 模型驱动建表---更多简化法是在建 ...
- atitit.提升开发效率---动态语言总结
atitit.提升开发效率---动态语言总结 ruby,python 都不错,就是语法不好, 应用不广泛,文档,工具都非常少,不推荐... php狠不错,就是高级特性不行.. 看来子有.net/jav ...
随机推荐
- 浏览器中 for in 反射 对象成员 的差异
http://www.cnblogs.com/_franky/archive/2010/05/08/1730437.html 下面是例子 function test(url, obj) { if($( ...
- DbProviderFactories.GetFactory Oracle.ManagedDataAccess.Client
因为最近项目,要使用微软的EF框架不安装Oracle客户端的情况下,访问Oracle数据库.调用如下代码的时候会报错. System.Data.Common.DbProviderFactories.G ...
- Oracle处理特殊字符
检查数据库级的参数设置 select * from nls_database_parameters;
- 认识div(division)在排版中的作用
在网页制作过程过中,可以把一些独立的逻辑部分划分出来,放在一个<div>标签中,这个<div>标签的作用就相当于一个容器. 语法: <div>…</div&g ...
- 为什么struts2 ajax 方法执行两次
struts2中使用json插件执行ajax处理时,如果方法名是get方法的时候,方法会莫名其妙的执行两次. 原因: struts2 中JSON的原理是在ACTION中的get方法都会序列化,所以前面 ...
- chromedriver 与 chrome关联关系
----------ChromeDriver v2.22 (2016-06-06)---------- Supports Chrome v49-52 Resolved issue 1348: Time ...
- js学习笔记之:数组(二)
今天来学习一下数组的遍历.删除等知识点: 1 数组的遍历 数组元素的遍历可以使用for循环,采用关键字for...in var aCity = new Array("北京" ...
- OOCSS学习(一)
OOCSS —— 面向对象CSS 搜集一些该搜集的,然后汇总一下. 1.OOCSS 概念篇: 1)什么是面向对象 确定“对象”,并给这个对象创建CSS样式规则. 2)面向对象的CSS理论 OOCSS最 ...
- 给AVS添加描述(how to add a description to a video)
UPDATE you might need edit few files. 1. add the input field to the tpl file: /templates/frontend/yo ...
- Java 的性能优化
jvm 中的方法区: 永久区---存的类的信息.方法.常量 .静态变量 1.Java的性能优化 1.减少gc的压力,优先级比较低的线程,他是一个守护线程 回收我们的堆内存. 2.尽量的避免我们的new ...