《自己动手写框架7》:关于框架体系与战术的思考

什么是框架?

这个问题实际上许多“做框架”的人也不明白。 框架和库的本质不同在于:

  • 框架考虑的是机制的复用,而库主要考虑的是代码的复用
  • 框架考虑的是在机制不变的情况下进行扩展,而库则基本不考虑扩展方面的问题
  • 框架本身是不完整的,在大多数的情况下它自己是干不了啥事情的,而库自身是完整的,可以解决某个领域的问题。
  • 框架是活的,通过不断的扩展与衍生,它就更加强大,而库而是死的,发布时是怎样,就是怎样。

当然,关于这两货之间的比较,还有许多个角度,但我个人觉得本质是我上面举的这些。

设计的时候应该考虑哪些问题?这个问题的答案,如果用一句话来解符号,那答案就是:要仔细考虑使用这个框架的人感受,要考虑如何让使用者感觉爽的问题。当然如果是三天两天说不清楚的方式,那就得从方法论,问题领域,设计原则等待进行阐述了。

怎样才是一个及格的框架?这个问题,用一句话解释,就是在满足上一个问题的情况下不违背基本设计原则,那么就可以算是一个及格的框架。如果用三天两天说明,那就要把所有的基本设计原则拿出来,一个个讲讲清楚,一个个说说明白。

如果满足了第一个条件,使用者是满意的,从使用来说是不错的;如果满足了第二个条件来说,从设计及实现来说是不错的。如果两个都满足了那说明,最起码是可用的及格的框架,当然也可能得分更多。

开源框架的体系与战术

顺便,今天还谈谈框架的体系与战术性角度,一家之言,说得不对还请海涵。

从军事上来说,战术性的战斗就是具体的一块无关紧要的战斗,胜就胜了,败就败了,局部互有长短,但是就全局来说没有本质的影响;而体系性的则是影响双方势力对比的重要关键点,是个死去活来的问题,是西风压倒东风还是东风压倒西风的问题。

做框架也是有同样的问题的,如果框架只能解决一个局部部分,或者说具体问题,那么就是战术性框架;比如一个Xml解析器,一个网络爬虫框架等等,都是解决具体问题的,因此不管做得怎么到位,怎么好,都是一个战术性的问题。

那么我再拿人们常说SSH框架来说,很明显Hibernate和Struts是属于战术性框架的。但是Spring则明显不同,表面上Spring本身只是提供了一系列的机制和体系,但是它本身并不做具体的某个方面的问题,他解决IOC,AOP之类的比较虚的问题,但是正因为如此,它占据了整个开源框架的核心位置,许许多多的别的框架都是非常容易被替换及剔除的,但是唯一的要剔除Spring就比较困难--或者说,剔除Spring,就需要找一个比Spring更好的方案来替代,没有找到之前,就很难真正剔除它。

偶也看了OSC上一些同学的框架的源代码,从解决具体的问题来说,技巧、慎密性、前卫性都不错,但是看来看去,感觉还是在战术性问题上打转转,也就是解决具体问题方面做得非常不错,但是在体系性方面就比较弱了。

在此,我也把自己对框架(Framework)的理解和大家交流,我的理解Framework一定是Framework框架者构建的结构性、体系性、机制性的部分,而让使用者提供实际的、业务的、具体的实现的部分;当然Framework构建者也可以提供一些实际的、业务的、具体的实现的部分,但是这只可以作为默认的、基本的实现,它在大多数的情况下都是够用的,但是在特殊情况下是可以被拿掉的,是可以被替换的。

也就是说,如果你达到上面要求,你才可以说是一个框架(Framework),否则,你只是个Library,只是一个代码库,不能称之为一个框架。

可能有的同学们又说了,你呼扯海说了半天,你现在设计的框架怎么就是有体系性的了??这正是我下面要解释的问题:

1.通过大量的体系性上思考,它不仅立足于解决开发问题,还考虑集成、发布、维护方面的问题。
2.构建了许多子框架,比如:流程框架,插件框架、UI框架等等,这些框架只有体系和机制及规范方面的内容,本身是不提供具体功能的,但是业务开发人员可以基于其之上进行扩展,来达成各种目标。
3.在在实现方面大都考虑有侵入性及无侵入性,也就是说如果你可以接受侵入性,那你就做起来更方便;如果你不接受侵入性,那么也可以使用Tiny框架的许多功能。
4.在集成方面下的功夫是最大的,可以方便实现自组装,也就是扔进去不用管的模式。
5.在模块化方面也是投入大量的力量,所有的资源都可以打入Jar包,不必修改web.xml就可以进行各种Web模板的加载等待。
6.战略性目标是构建一个生态圈,做UI的,做逻辑的,做业务的能够做自己擅长的事情,通力协作。

所以,正因为Tiny框架做了许多体系性的工作,可能不能直接实现某个功能,但是它的作为体系在开发、协作、维护、支持各个阶段。

当然,我们正在设计的框架中也包含了大量的解决实际问题的库和框架,同时也不拒绝各种开源框架的集成与使用。

因此,大的开发框架是个体系性的工程。所以,做开源框架之前,先要定位准确,是做战术性的还是体系性的框架,这样只做自己擅长,可控的事情,才得心应手,轻松愉快,同时又可以获得最大回报。

什么是框架?

这个问题实际上许多“做框架”的人也不明白。 框架和库的本质不同在于:

  • 框架考虑的是机制的复用,而库主要考虑的是代码的复用
  • 框架考虑的是在机制不变的情况下进行扩展,而库则基本不考虑扩展方面的问题
  • 框架本身是不完整的,在大多数的情况下它自己是干不了啥事情的,而库自身是完整的,可以解决某个领域的问题。
  • 框架是活的,通过不断的扩展与衍生,它就更加强大,而库而是死的,发布时是怎样,就是怎样。

当然,关于这两货之间的比较,还有许多个角度,但我个人觉得本质是我上面举的这些。

设计的时候应该考虑哪些问题?这个问题的答案,如果用一句话来解符号,那答案就是:要仔细考虑使用这个框架的人感受,要考虑如何让使用者感觉爽的问题。当然如果是三天两天说不清楚的方式,那就得从方法论,问题领域,设计原则等待进行阐述了。

怎样才是一个及格的框架?这个问题,用一句话解释,就是在满足上一个问题的情况下不违背基本设计原则,那么就可以算是一个及格的框架。如果用三天两天说明,那就要把所有的基本设计原则拿出来,一个个讲讲清楚,一个个说说明白。

如果满足了第一个条件,使用者是满意的,从使用来说是不错的;如果满足了第二个条件来说,从设计及实现来说是不错的。如果两个都满足了那说明,最起码是可用的及格的框架,当然也可能得分更多。

开源框架的体系与战术

顺便,今天还谈谈框架的体系与战术性角度,一家之言,说得不对还请海涵。

从军事上来说,战术性的战斗就是具体的一块无关紧要的战斗,胜就胜了,败就败了,局部互有长短,但是就全局来说没有本质的影响;而体系性的则是影响双方势力对比的重要关键点,是个死去活来的问题,是西风压倒东风还是东风压倒西风的问题。

做框架也是有同样的问题的,如果框架只能解决一个局部部分,或者说具体问题,那么就是战术性框架;比如一个Xml解析器,一个网络爬虫框架等等,都是解决具体问题的,因此不管做得怎么到位,怎么好,都是一个战术性的问题。

那么我再拿人们常说SSH框架来说,很明显Hibernate和Struts是属于战术性框架的。但是Spring则明显不同,表面上Spring本身只是提供了一系列的机制和体系,但是它本身并不做具体的某个方面的问题,他解决IOC,AOP之类的比较虚的问题,但是正因为如此,它占据了整个开源框架的核心位置,许许多多的别的框架都是非常容易被替换及剔除的,但是唯一的要剔除Spring就比较困难--或者说,剔除Spring,就需要找一个比Spring更好的方案来替代,没有找到之前,就很难真正剔除它。

偶也看了OSC上一些同学的框架的源代码,从解决具体的问题来说,技巧、慎密性、前卫性都不错,但是看来看去,感觉还是在战术性问题上打转转,也就是解决具体问题方面做得非常不错,但是在体系性方面就比较弱了。

在此,我也把自己对框架(Framework)的理解和大家交流,我的理解Framework一定是Framework框架者构建的结构性、体系性、机制性的部分,而让使用者提供实际的、业务的、具体的实现的部分;当然Framework构建者也可以提供一些实际的、业务的、具体的实现的部分,但是这只可以作为默认的、基本的实现,它在大多数的情况下都是够用的,但是在特殊情况下是可以被拿掉的,是可以被替换的。

也就是说,如果你达到上面要求,你才可以说是一个框架(Framework),否则,你只是个Library,只是一个代码库,不能称之为一个框架。

可能有的同学们又说了,你呼扯海说了半天,你现在设计的框架怎么就是有体系性的了??这正是我下面要解释的问题:

1.通过大量的体系性上思考,它不仅立足于解决开发问题,还考虑集成、发布、维护方面的问题。
2.构建了许多子框架,比如:流程框架,插件框架、UI框架等等,这些框架只有体系和机制及规范方面的内容,本身是不提供具体功能的,但是业务开发人员可以基于其之上进行扩展,来达成各种目标。
3.在在实现方面大都考虑有侵入性及无侵入性,也就是说如果你可以接受侵入性,那你就做起来更方便;如果你不接受侵入性,那么也可以使用Tiny框架的许多功能。
4.在集成方面下的功夫是最大的,可以方便实现自组装,也就是扔进去不用管的模式。
5.在模块化方面也是投入大量的力量,所有的资源都可以打入Jar包,不必修改web.xml就可以进行各种Web模板的加载等待。
6.战略性目标是构建一个生态圈,做UI的,做逻辑的,做业务的能够做自己擅长的事情,通力协作。

所以,正因为Tiny框架做了许多体系性的工作,可能不能直接实现某个功能,但是它的作为体系在开发、协作、维护、支持各个阶段。

当然,我们正在设计的框架中也包含了大量的解决实际问题的库和框架,同时也不拒绝各种开源框架的集成与使用。

因此,大的开发框架是个体系性的工程。所以,做开源框架之前,先要定位准确,是做战术性的还是体系性的框架,这样只做自己擅长,可控的事情,才得心应手,轻松愉快,同时又可以获得最大回报。



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



《自己动手写框架7》:关于框架体系与战术的思考

时间: 2024-10-24 17:03:12

《自己动手写框架7》:关于框架体系与战术的思考的相关文章

自己动手写Android插件化框架

最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪费不少时间,如插件Context和主工程Context的区别,权限必须在主工程申明等,因此花了点时间了解了一下插件的历史,并写了两个Demo作为总结.本文旨在通过两个实例直观的说明插件的实现原理以加深对插件内开发的理解,因此不会深入探讨背景和原理,代码也尽量专注于核心逻辑. 原理与背景 Android插件化从技术上来说就是如何启动未安装的apk(主要是四大组件)里面的类,主要问题涉及如何加

《自己动手写框架8》:高屋建瓴,理念先行

<史记·高祖本纪>:"地势便利,其以下兵于诸侯,譬犹居高屋之上建瓴水也."这里用到了高屋建瓴这个词.意思是把瓶子里的水从高层顶上倾倒.比喻居高临下,不可阻遏的形势.现指对事物把握全面,了解透彻.此典故于汉高祖刘邦欲杀功臣韩信,大夫田肯进言到"陛下牢牢地控制着三秦(关中),陛下利用这雄险的地势,来控制.驾御诸侯,就如从高高的屋脊上把水从瓶子里倒下去."以此来表彰韩信的功劳,于是,刘邦赦免了韩信,只是将他降为淮阴侯. 同样,设计企业框架,也要对事物把握全面,

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

理想的开源框架?她应该是小的.简单的,满足Simple Is Beautiful?她应该是成长性好的,随着不断的扩展,她可以越来越丰满?她应该是有良好工具支持的,为什么要花时间做工具可以完成的事情呢??她应该是自组装的,也就是尽可能的脱离配置,而是用一种依赖即可用,取消依赖即消失的全自动处理模式?她应该是模块化的,所有的内容都可以被打入jar包而作为一个整体进行发布,并且能支持热部署的,可以开着车儿换轮胎的?她应该是支持水平部署的,想加服务器就加,想减服务器就减?她应该是有良好知识积累体系的,使

《自己动手写框架3》:业务流程引擎

一般的时候,我们都采用编程式开发,编程式开发的好处非常明显:直接.高效.自由,当然其缺点也是有的,与其优点刚好相对,因为直接,所以有些变化都要进行代码上的修改:因为高效,所以一旦出问题,导致的结果也比较严重,因为自由,所以带来的修改风险也比较大.  这也就是许多大的公司都在进行流程化开发的重要原因之一,比如:上海普元,Livebos, Justep,还有许许多多知名不知名的公司都有类似的流程化开发引擎存在,通过流程化开发,增强代码的复用性,降低软件开发成本及测试成本,提升软件的可维护性及降低维护

《开源框架那点事儿20》:自己动手写前端框架

曾经发表过一篇文章:TinyAdmin前端展现框架.其在线演示路径为:http://www.tinygroup.org/tinyadmin/.应该说有很多人还是感觉兴趣的,可是因为这个是基于SmartAdmin框架改写的,尽管我们自己买了SmartAdmin的授权,可是广大用户假设要用的时候,就会有授权相关的问题,这会大大影响一些人的使用决策--尤其是会再发行的朋友. 再一个原因是SmartAdmin初看不是不错的.可是实际用起来.里面的问题比較多.对IE8基本上能够说是不兼容,尽管我们努力进行

《自己动手写开源框架10》:Web界面快速开发实践

下面是一些常用的链接,供大家使用: GIT地址:https://git.oschina.net/tinyframework/tiny问题报告:https://git.oschina.net/tinyframework/tiny/issues更多内容,请看本人博客,不一样的内容,一样的精彩! 在展示过程的同时,会把相关的知识做一个充分的介绍 .一.寻找网站模板 要做网站,不能没有模板,自己不会做网页设计,咋办?问谷歌找百度呗,找了一阵,看到下面这个模板不错,就它了. http://www.toop

《自己动手写框架4》:分布式锁的简单实现

分布式锁在分布式应用当中是要经常用到的,主要是解决分布式资源访问冲突的问题.  一开始考虑采用ReentrantLock来实现,但是实际上去实现的时候,是有问题的,ReentrantLock的lock和unlock要求必须是在同一线程进行,而分布式应用中,lock和unlock是两次不相关的请求,因此肯定不是同一线程,因此导致无法使用ReentrantLock. 接下来就考虑采用自己做个状态来进行锁状态的记录,结果发现总是死锁,仔细一看代码,能不锁死么. public synchronized

自己动手写PHP MVC框架

来自:yuansir-web.com / [email protected] 代码下载: https://github.com/yuansir/tiny-php-framework PHP的框架众多,对于哪个框架最好,哪个框架最烂,是否应该用框架,对于这些争论在论坛里面都有人争论,这里不做评价, 个人觉得根据自己需求,选中最佳最适合自己MVC框架,并在开发中能够体现出敏捷开发的效果就OK了,作为一个PHPer要提高自己的对PHP和MVC的框架的认识,所以自己写一个MVC框架是很有必要的, 即使不

自己动手写框架(一)

PHP框架接触有一段时间,主要是Kohana和Thinkphp.这两个框架各有各的特色,总体来说Kohana还是相对来说比较简单,但是国内资料较少. 简单的,我把我的这个框架命名为Demo. 框架搭建第一步,总体目录规划: 目录  APP(应用)->TEM (主题) -> SYS (系统) ||-------Application 应用 |---classes Controller Models |---views || ---Template 主题 |---classes Controlle