编程N年,积累下来的一些方法论,映射到目前本身维护 Legoo内核,须要本身给本身一个概括与抽象,在正式介绍设计架构以前,我先从更为抽象的角度来看待他,他的设计坚持了什么原则,这些原则是否正确则留 给读者本身去评判了,这些准则都是很简单明了,事实上,也能够做为大家ITer 设计一些程序框架参考的方法论,抑或拷贝到大家的项目解决方案中,哈哈~~ 以前我也是一直如此,直到创建了属于我本身认知的知识体系,这些比较飘渺的东西能够用一个很牛逼的词汇来形容:“哲学”,好了,吹水无益,仍是仔细阅读下 文吧!!哇咔咔~~~~~
设计这个内核框架对我影响最大的就是 《Niux内核设计》一书(没有通读完,至少代码是看不懂)
这些比较简单的准则阅读起来都很简单,估计小学毕业的学生就能够通读了,然而,就是此次如此简单的却被别人容易忽略,而老是去追求架构的完美性与复杂性,生活中的美无处不在,计算机也是一种艺术的体现,然而艺术源自生活,因此,从生活中汲取设计的灵感是最为重要。
准则第一条:小便是美。 相 对于庞然大物而言,小巧的事物有着无可比拟的巨大优点,其中很重要的一点就是,这些小的事物能够提供有效而独特的方式进行结合,从而构建完美庞大的“庞然 大物”,例如 宜家家居 就是源自生活的一个表明性的例子,他的家居历来不是总体的,并且是进过独特设计的一个个零件,固然这些零件老是能够任意组装,从而迭代出新的家居,源源不 断,甚至整个装配有用户本身设计,他们提供 能够装配的零件。冥想吧~~骚年们~~~
准则第二条:让每个程序只作好一件事。 从 设计角度看,经过集中精力因对单一任务,程序能够减小不少冗余的代码,从而避免太高的资源开销,减小没必要要的复杂性与灵活性。从复用的角度看,单一的程序 更加容易被放心的 复用,应为他 很单一,没有二义性的功能提供。体如今Java中,我的认为最小的粒度就是一个Class 只完成一个功能,而且这个功能没有二义性。放大到SOA,则一个服务制做一个功能,例如密码加密服务。
准则第三条:舍弃高效而采起可配置性 。软 件是为了现实世界中的业务所服务,现实世界中的业务惟一不变的特性就是他一直在变,如何应对这种可变性,那就是把可变的因素尽量的采起配置化处理,而放 弃硬编码方式的流程处理,尽管硬编码方式的处理带来了高效性,可是他失去了灵活性,可配置性一直是软件行业所追求的终极目标之一,从OSGI到SOA,都 在努力往这个方面努力,至少本人是这样子认为的。
准则第四条:让每一个程序都成为过滤器。 软件仅仅是对数据进行过滤加工,而不是创造数据,数据是人创造的(OOB), 程序只是修改数据而不是创造数据,基于这个思想出发,我在设计legoo 内核是,把一切都当作是 Filter,每一个Filter是一个动做,并且这个动做是无状态(thread-safe),因此能够复用,复用到anywhere,filer集成的 片断也能够处处 复用,这是一个无限的循环。片断在集成更大的片断~~~~~~~~~~~~~~~~~片断在复用。
准则第五条:良好的扩展性。在这 里我要介绍一下 什么是扩展性,我说的扩展是基于插件的开发,做为一名开发人员,做为讨厌就是做为其代码螺丝,只能在既定的状况下无需创新的开发,这种强制性的框架一出生 就是垃圾,把开发人员看成螺丝的框架都是一种螺丝,特别是一些大公司,把程序员看成代码机器,因此,内核必须有良好的扩展性,用户能够扩展本身的插件,内 核与用户(程序员)成为一种互动,互为弥补,而不是单一的约束。
准则第六条:充分利用软件的复用效应。复用-复用-在复用,如何可以实现,这是内核必须解决的问题之一。软件盈利的条件之一就是 开发成本,TTM等,以后严格控制好开发成本,只有经过大量的复用,才能在短期内编写出大量的应用程序。
准则第七条:尽快创建原型。原型是采用OOB的思想对用户需求的一种描述,用户的需求都是能够经过OOB进行原型简历,这些原型就是数据模型,能够很快的指导开发。
准则第八条:配置采用文本文件存储。这一点主要是考虑程序的移植性,尽可能下降程序运行对外部环境的依赖性,特别是做为内核的设计,legoo内核的自己不依赖于任何框架,是纯粹的基于JVM的,它具备很好的适应性与移植性。
准则第九条:充分利用配置的杠杆效应。配 置文件一直都是双刃剑,利用配置文件能够增强软件的可重用性与可移植性,可是配置的复杂性也是须要权衡的,必须把配置文件的使用约束在必定范围以内,只有 这样才能更好的使用配置文件。legoo内核 对配置的文件的用法有必定的规范化,用户的配置必须依赖必定的配置模式,同时也支持用户对配置文件的扩展,这样能够更好地面对各类多变的业务流程。
准则第十条:完成90%的功能支持。这一点是很泛指的准则,任何一个内核都没法解决所有问题,可是能解决80%以上的已是一个很完美的内核,legoo 内核也是一直在朝这个方向努力。
准则第十一条:部分之和大于总体。小程序集合而成的大程序比单个的大程序更为灵活,也更为实用,这是 微积分 思惟的再次重申,小的程序更加具备前瞻性。legoo 内核的的程序粒度为 方法。
上面罗列出的这些,是我在不断维护legoo内核时的一些总结,主要是给本身总结的机会,顺道分享给你们,但愿能多少帮助到基于It界的各位。
这一文章是 做为 推出 我 legoo 内核架构的第一篇文章,争取下一篇文章早点面试,其实 这套架构在公司已经全面推广,这个内核在公司已经做为 公司的开发平台使用,为我下一步编写 开发平台白皮书 准备着~~~~