atitit.提升研发效率的利器---重型框架与类库的区别与设计原则

1. 框架的意义---设计的复用 1

1.1. 重型框架就是it界的重武器。 1

2. 框架 VS. 库 可视化图形化 1

2.1. 类库 2

2.2. 应用框架 2

2.3. 框架与类库的区别主要表现在以下几个方面: 2

2.4. 框架模式就是参团游,而自由行则类似于库的组合 3

3. 框架的特点 3

3.1.  没有一个万能的框架
3

3.2. 框架是不可组合的 3

3.3. 框架设计的俩个方向::全栈式与精细化 4

4.  框架设计经验、原则 4

4.1. 通用框架与应用框架 4

4.2. 选择框架还是库。。可组合的库 5

5. 参考 5

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.提升研发效率的利器---重型框架与类库的区别与设计原则的更多相关文章

  1. atitit.提升研发效率的利器---重型框架与类库的差别与设计原则

    atitit.提升研发效率的利器---重型框架与类库的差别与设计原则 1. 框架的意义---设计的复用 1 1.1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 2.1 ...

  2. atitit.提升研发管理的利器---重型框架 框架 类库的区别

    atitit.提升研发管理的利器---重型框架 框架 类库的区别 1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 3. 应用框架 1 4. 类库 2 5. 框架是不可 ...

  3. atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较

    atitit.提升开发效率---使用服务器控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...

  4. atitit.提升开发效率---mda 软件开发方式的革命--(2)

    atitit.提升开发效率---mda 软件开发方式的革命--(2) 1. 一个完整的MDA规范包含: 1 2. 一个完整的MDA应用程序包含: 1 3. MDA能够带来的最大的三个好处是什么? 2 ...

  5. atitit.提升开发效率---mda 软件开发方式的革命

    atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...

  6. atitit.提升开发效率---使用server控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比較

    atitit.提升开发效率---使用server控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比較 例如以下列举了server控件生命周期所要经历的11个阶段. (1)初始 ...

  7. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结

    Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结 1. 管道抽象 1 2. 层次结构抽象(json,xml etc) 1 3. 异步抽象promise 1 4. Ide ...

  8. atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表

    atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表 1. 建模在后自动建表 1 1. 传统上,需要首先建表,在业务编码.. 1 2. 模型驱动建表---更多简化法是在建 ...

  9. atitit.提升开发效率---动态语言总结

    atitit.提升开发效率---动态语言总结 ruby,python 都不错,就是语法不好, 应用不广泛,文档,工具都非常少,不推荐... php狠不错,就是高级特性不行.. 看来子有.net/jav ...

随机推荐

  1. mysql 碎片清理

    在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作——MySQL数据表碎片整理. 那么,为什么在使 ...

  2. 关于muse-ui 图片不显示的办法。

    直接使用框架提供的例子不能显示图片.需要npm安装 才可以直接使用. npm install --save material-design-icons

  3. 智普教育Python视频教程之入门基础篇,python笔记

    智普教育Python视频教程之入门基础篇,python笔记 print id()内存地址 type()变量类型 windows命令行下edit命令 python数据类型不需要指定类型 定义hostna ...

  4. 【笔记】js Array.prototype.slice.call(arguments) 将函数的参数转换为数组方法的见解

    我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组 如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法 分析一下这个方法: Array.pr ...

  5. Redis中为什么使用跳表---------转自http://blog.csdn.net/u010412301/article/details/64923131

    最近在研究数据库的一些底层实现,百度的面试官问到了跳表,当时没有回答上来,在csdn上看到了这篇文章,感觉写的比较好,希望大家可以多多交流. Redis里面使用skiplist是为了实现sorted ...

  6. HDU 3726 Graph and Queries treap树

    题目来源:HDU 3726 Graph and Queries 题意:见白书 思路:刚学treap 參考白皮书 #include <cstdio> #include <cstring ...

  7. [HTML5] Build Flexible HTML with HTMLTemplates using Slots and Web Components

    HTMLTemplates are part of the web components specification. In this lesson we will learn what are HT ...

  8. 图解aclocal、autoconf、automake、autoheader、configure

    http://www.laruence.com/2008/11/11/606.html 本文地址: http://www.laruence.com/2008/11/11/606.html 转载文章 原 ...

  9. EffectiveJava(30) -- 全面解析enum类型

    --在大多数项目中,我们会经常使用int类型来声明final类型的常量,它在不考虑安全的情况下确实能满足我们绝大多数的需求.但是在JDK1.5版本发布之后,声明一组固定的常量组成合法值的类型就建议使用 ...

  10. PHP基础知识(二)

    Global namespace  //看不懂看下面的中文 中英结合看看 When using namespaces, you may find that internal functions(内部( ...