《自己动手写框架9》:理想的开源框架与设计原则

理想的开源框架
?她应该是小的、简单的,满足Simple Is Beautiful
?她应该是成长性好的,随着不断的扩展,她可以越来越丰满
?她应该是有良好工具支持的,为什么要花时间做工具可以完成的事情呢?
?她应该是自组装的,也就是尽可能的脱离配置,而是用一种依赖即可用,取消依赖即消失的全自动处理模式
?她应该是模块化的,所有的内容都可以被打入jar包而作为一个整体进行发布,并且能支持热部署的,可以开着车儿换轮胎的
?她应该是支持水平部署的,想加服务器就加,想减服务器就减
?她应该是有良好知识积累体系的,使得使用Tiny框架的人们越用越强,越用越爽
?她应该是便于企业降低开发成本的,便于技术经理控制开发进度的,便于开发人员快速上手的
?她应该是避免重复劳动的,所有软件参与者都不应该做重复的事情
?她应该是自管理的,最好不要让程序员配置这个配置那个
?她应该是让人有种"众里寻他千百度,蓦然回首,那人却在,灯火阑珊处”的开发框架

按照这个目标去设计
?虽然整体体量比较大,但是它的每个模块都分得非常小,因此非常容易掌握
?它的各种组件都可以方便的进行扩展,通过扩展可以不断的提升系统的处理能力
?它的工具已经非常强大,而且它还是变得更加强大。
?不管是管理台还是过滤器、Servlet,不管是流程组件还是UI组件,还是UI组件包等等都是可以自组装的
?Web工程只是个集合,除了配置文件和Pom依赖,不应该有其它东西
?支持水平扩展,同时可以支持7*24小时运行
?开始团队由金字塔向哑铃型转变,高低水平者各司其职
?绝大多数情况下,要做的只是依赖,而不需进行配置

这样去打造框架——设计原则梳理

1. COC原则

Tiny框架在设计时充分考虑此原则,凡是可以通过一定的约定来大大减少配置或开发量的,一般都会采用。所以在Tiny框架的扩展、开发、配置过程中,会经常发现一些“潜规则”,如果利用好这些“潜规则”,会起起事半功倍的效果。无标签评论用户图标: cskang蔡少康发表:Convention over Configuration(CoC)–惯例优于配置原则简单点说,就是将一些公认的配置方式和信息作为内部缺省的规则来使用。例如,Hibernate的映射文件,如果约定字段名和类属性一致的话,基本上就可以不要这个配置文件了。你的应用只需要指定不convention的信息即可,从而减少了大量convention而又不得不花时间和精力啰里啰嗦的东西,配置文件很多时候相当的影响开发效率。

Rails 中很少有配置文件(但不是没有,数据库连接就是一个配置文件),Rails 的fans号称期开发效率是 java 开发的 10倍,估计就是这个原因。Maven也使用了CoC原则,当你执行mvn -compile命令的时候,不需要指源文件放在什么地方,而编译以后的class文件放置在什么地方也没有指定,这就是CoC原则。

2. DRY“不要重复自己”原则

Tiny框架的构建者对于做重复的事情一向是深恶痛绝的,因此非常不原意开发人员在基于Tiny框架进行开发时出现重复的内容。为此Tiny框架在设计上做了大量的工作,来避免程序员做违反DRY原则的内容,所以在Tiny框架中,所有的工作内容都是做一次就足够。无标签评论用户图标:cskang蔡少康发表:

DRY——Don‘t RepeatYourself Principle,直译为“不要重复自己”原则^_^

DRY简而言之,就是不要写重复的代码。原则本身很简单,但是,对于OOAD来说,有着非常重大的意义。

DRY利用的方法就是抽象:把共同的事物抽象出来,把代码抽取到一个地方去。这样就可以避免写重复的代码。

举一个DRY的典型例子,如果在一个类构造的时候,需要进行成员的初始化,在进行了某些操作以后,同样要进行初始化,那么就可以把“初始化”抽象出来,做成一个方法Initial(),在构造和需要用到的地方调用它。

虽然,抽取重复代码是利用DRY的一个好的开端,但DRY的实质是,一个需求,用一个部分来完成。当你试图避免重复代码的时候,实际上,你做的应该是用一段代码来完成一个需求。

为什么要用DRY原则?DRY会给代码维护带来很大的好处。以类的初始化为例,假设类修改了,增加、减少或是修改了成员,如果不写Initial(),那么你可能至少要修改两处,而且,修改之处也可能出现不一致,维护成本大大增加。而写了Initial()方法,那么只要集中修改Initial()就行了。

既然DRY是关于“一个方法,实现一个需求”的,那么,是不是可以把DRY应用到需求分析中?呵呵,答案是肯定的,而且,个人认为,这是个非常好的主意。多个重复的需求可能导致多个重复或者相近的类,最后导致重复代码。所以DRY绝不仅仅对代码适用,它是一个广泛适用的原则。

3. SUBTRACTION减法原则

减法原则是我们自己提出的,意思就是给程序员做减法。一般来说越到底层的程序员,工作时间越短、技能越弱、经验越少。但是实际工作当中,你会发现越到底层的程序员要做的事情越多,要用的技能也越多。Tiny构建者认为,这也是现在程序员工作效率低、质量差的重要原因。因此我们认为应该给程序员做减法,越到底层的程序员做的事情要越单一、越简单。

4. 下级服从上级原则

可能有人在笑了,这个也算原则?确实,它就是原则,只不过原来下级服务上级是挂在嘴上的,而Tiny框架则从框架层级做了限制,使得下级必须服务上级。这两点主要体现在流程及页面实现中,上级经理可以对下级完成的工作内容进行强制性要求实现,不同的是流程是采用显式继承的方式,而页面是隐式继承的方式

5. 单一原则

几乎每个熟悉Tiny框架的人可能会问同一个问题,那就是:为什么Tiny分了这么多的工程?Tiny框架的构建者也深深的知道这样会增加相当的集成工作,但是这样做的好处是可以把单一原则进行强制性的约束,使得一个模块只解决单一模块应该解决的问题,从而避免不同的问题放在一起解决所导致的胡子眉毛缕不清的问题,同时也避免了不恰当的依赖及模板引用。

6. 模块化与自动组装原则

一般的软件开发,整个集成过程都需要人员小心翼翼,要配这个配那个,稍不小心就会有这种那样问题的出现Tiny框架构建者也常常知道这一点给集成人员带来的困难及给软件开发测试带来的巨大的工作量,因此在整个Tiny框架的构建过程中,都非常注重集成过程的自动组装,要求做到扔进去不用管,由框架自动集成。Tiny框架构建者深深知道,模块化对于软件开发过程中开发、高度、集成、发布、维护过程中所起的作用及节省或花费的巨大成本。因此提出了业务单元(Business Unit)的概念,使得与模块相关的所有内容都可以放在一起。

7. 集中配置原则

在Tiny构建者多年的工作过程中,被配置的问题所常常困扰,在开发期有许多问题是由于配置不当引起,在测试在发布及升级过程中,也有相当多的问题是由于配置不当引起的。在Tiny框架我们对配置做了大量的工作,一个是COC方式,如果不配,则采用系统默认的值;一个是集中原则:把需要人工需要配置的内容都集中起来统一配置;一个是对于不需要人工干预的配置,那就集成在Jar包中,作为发布者发布项的一部分。



欢迎访问框架论坛:http://web.j2ee.top。本例涉及的代码和框架资料,将会在论坛分享。《自己动手写框架》成员QQ群:228977971,让我们一起动手,了解框架的奥秘!

时间: 2024-10-11 02:04:49

《自己动手写框架9》:理想的开源框架与设计原则的相关文章

Android RoboGuice开源框架、Butter Knife开源框架浅析

Google Guice on Android(RoboGuice) 今天介绍一下Google的这个开源框架RoboGuice, 它的作用跟之前讲过的Dagger框架差点儿是一样的,仅仅是Dagger比它的功能更强大一些. Dagger通过专注于一种简化的功能集以一种不同的方式达到了更好的性能.有人觉得RoboGuice节约了大量的时间.较少的代码意味着较少的错误.较少的样板代码意味着能够把很多其它的时间放到应用的核心逻辑上.所以这就是为什么我们要使用这些开源框架来开发的原因. 以下我们来说说R

主流MVC框架的设计模式及遵守的软件设计原则

原文地址,会不断更新  http://it.zuocheng.net/mvc-design-pattern-design-principle-summary   作程的技术博客 本文以主流的MVC框架为例,比如Java 的SSH.PHP的Symfony和Zend Framework ,在简单地剖析他们的设计原理之后,找到其中使用的设计模式:鉴赏他们的代码实现,查看设计者们都遵守了哪些软件设计原则.作此文,一为学习,二为总结.其中下面所写内容可能并不全面,也可能不准确,但会不断修改完善. 框架模式

自己动手写可视化软件(代码已开源)

一年多前,那时候我还在实习,正好上一个项目接近的尾声,紧随而来的就是一个大数据一体化的项目,包括了数据的采集.处理.计算.整合以及数据展示等. 而可视化这块,在前期就落在了我的头上,虽然这款开源的小工具最终没有作为大数据可视化的解决方案,但是这是一个自己完完整整,一步一个脚印写起来的,从中学到的东西自然不仅限于这款工具,还有查找资料的方法.解决问题的思路等等,总得来说都是一段不错的学习经历. 时隔一年多,我还是想着把代码开源出来: 一来是因为这是群友和一些网友的呼声: 二来是目前的工作与可视化方

引用开源框架通过AsyncHttpClient进行文件上传

一.步骤: 1.添加权限(访问网络权限和读写权限) 2.获取上传文件路径并判断是否为空 3.若不为空,创建异步请求对象 4.创建上传文件路径 5.执行post请求(指定url路径,封装上传参数,新建AsyncHttpResponseHandler方法) 二.查看参考文档 三.实例项目解析 运行效果如下:       在本地文件夹中查看是否获取到图片,如下图显示 重点代码:均有详细解析,请认真查看注释 1.在AndroidManifest.xml中添加权限 <uses-permission and

最受欢迎的15个Python开源框架

GitHub中15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. 1.Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. 2.Diesel:基于Greenlet的事件I/O框架 Diesel提供一个整

转载:15个最受欢迎的Python开源框架

出自:http://python.jobbole.com/72306/?replytocom=57112 15个最受欢迎的Python开源框架 Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. Diesel:基于Greenlet的事件I/O框架 Diesel提供

15个最受欢迎的Python开源框架

这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. Diesel:基于Greenlet的事件I/O框架 Diesel提供一个整洁的API来编写网络客户端和服务器.支持TCP和UDP. F

【转】15个最受欢迎的Python开源框架

以下是伯乐在线从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. Diesel:基于Greenlet的事件I/O框架 Die

【python】15个最受欢迎的Python开源框架

Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. Diesel:基于Greenlet的事件I/O框架 Diesel提供一个整洁的API来编写网络客户端和服务器.支持TCP和UDP. Flask:一个用Python编写的轻量级Web应用框架 Flask是一个使用P