#技术分享# “乐高”内核的诞生

      临近2013年底了,这是一个稀松的周末,一早起床,迎 着窗户外直射的阳关,尽管身处天朝南方重镇,冬天的这里依旧有点料峭,我有种要写作的冲动,特别是为我的技术生涯做点阶段性的概括,另外一点需要特别让我 高兴的是,我生命中的第一个小宝宝很快就降临了,作为迎接他的一份礼物,我打算分享我这么些年来自己的一些程序人生,特别是我一直在倾注心血的“乐高框 架”设计思路,经过几年不断的完善,目前起内核程序基本设计完毕,回想这一路的设计思路,还是唏嘘不已,庆幸自己一直坚持,才有现在的小小收获。
     
       在编写之前,我想解释一下 为什么采用
“乐高” 作为内核的命名,其实就是美国的一个玩具品牌,他设计的玩具不仅仅丰富了全球的儿童,也丰富了很多老顽童的世界,利用乐高积木可以搭建你任何想象中的物 体,在我看来,其本质就是微积分的现实应用,现实中的任何物体,经过规则的切割之后,都可以看作是乐高积木的原型,在“微观”的世界,也许你仅仅是一个积 木,但是数以千计的积木进行了有规则的堆砌,则可以还原我们现在的世界。我设计的框架内核也是秉着这一核心思想,所以,我用借用 乐高 这一积木的品牌用于我小设计的名称。也寄托于希望我的框架如同乐高积木一样,能自由组装成任何想要的程序流程实体。

      ---------------------  第一章 混沌世代 ---------------------------------------------
      
首 先我要讲解的是 ”乐高“ 内核的由来,记得那时还在广州东软金融部,就职于**网银开发团队,面对**网银那种扎乱无章的程序代码,不断的在做功能新增量式开发,那个时候的我总是 思索,为什么程序架构如此的难以扩展(不排除历史原因的限制),为什么一个简单的流程需要修改代码,当时主要的是业务流程的改变应发程序的不断修改,我一 直在思索如何避免这种情况的发生,直到有一天,我在apahce 网站 看到了 一个很小的责任连框架 chain,让我的思路一下子清晰很多,原来程序可以这样子编写,随后在负责的在线黄金交易中,果断的引入chain 框架进行开发,在一期的时候,团队人员都习惯这种模式,大家也是一直在摸索,但是到了项目的第二阶段,开始凸显他的价值,因为流程是配置出来的,而非硬编 码干预。。。。。当时的引入的责任连是完全基于chain,没有分支,仅仅一个个配置的可复用的程序片段,用xml文档对整个流程进行的描述。这是 ”内高“内核最开始的萌芽,可以称为是 混沌 时代,因为我自己也不知道这玩意到底如何更好地使用,当时的感觉 如同一个儿童 忽然发现一个新奇的玩具,带着一份好奇的心理去玩弄这个玩具,当时就是这样子的一种场景。

   
---------------------  第二章 盘古时代 --------------------------------------------- 
     盘古时代,顾名思义--开天辟地:很快在网银的第二个项目开始了,《工时统计系统》,这是完全基于公司内部管理定制的系统,该系统是利用工作业余时间打 造,伴随这个项目的逐步上线,我对 责任连模式的开发有了一个更好的认知,从而有了改进他的想法,如何支撑流程分支的配置(通俗讲是规则引擎),当时由于该项目是自主研发,引入Spring 框架作为底层的支撑,让我节约了大量的研发精力而专心我的架构精细化,记得那时的spring推出了 2.5版本吧,里面有一个章节是 spel 的引入,基于简单表达式的动态解析,这不就是恰好是我想要的东东吗?记得在这一个阶段里,内核框架做大的一个突破就是,流程分支不在基于代码,而是基于配 置实现,其底层依旧采用chain作为实现,当时该框架固有的诟病已经有点突出了,扩展性不好,每个节点只能基于他的接口,但是 引入 spel 这个东东,足以为”乐高“内核注入新鲜的血液,记得当时,我一度计划选用 groovy 语言作为 规则引擎的实现,可惜在当时该语言在JVM的世界里,尚是一个挑梁小丑,所以没有大胆引入,选用SPEL可以与Spring框架更好地结合,这也算是利弊 均衡吧。记得当时在分享 工时系统 的技术实现,在网银团队的很多同事给出了中肯的意见,尽管当时觉得很完美,对他们的意见不是很采纳,但是还是修正我设计 乐高 内核的下一步动作。让内核向这更加完善的易用的方向发展。

      ---------------------  第三章 蛰伏时代 --------------------------------------------- 
      可惜好景不常,随着东软的离职,”乐高“内核也伴随着离职事件进入尘封期,那个时候忙搬家,从广州到深圳,忙着熟悉新的环境,新的同事以及新的工作岗位, 这次迎来的是我职业生涯中的一段 低落 期,我入职了深圳平安科技公司,从事保险行业的软件开发与维护工作,对于公司我不做评价,每个人的宿命不同,我与公司的那种”罐装劳动力“氛围格格不入, 每天就是等待工作任务,完成任务,提测代码,在等待下一个任务的分配。我就是一个庞大生产线上的螺丝,不需要创新,不需要个性,只需要按部就班的完成任 务,也许在那样的氛围下,压迫之下的迸发,当时在没有更好地选择下,我重新回到我维护的内核框架,每天上班除了本质工作就是在思索 内核的设计,记得当时买了一包A4打印纸,基本都被我用掉了,因为在公司不可以太张扬,所以每天的设计思维就是利用打印纸去不断的丰富,下班回家在编码实 现,这个阶段的内核有了一个质的飞跃,完全摆脱了 chain 框架,开始自己建立 基于 程序流程图的 流程建模,以及流程的流转,记得当时为了实现一些 基本流程的的可配置化,购买了 所谓龙书 编译原理,那段时间,业余时间过的很充实, 阅读了 里面大量的章节,特别是针对 for  if  if-else  switch try-cache-final 是如何编译执行指令以及指令运行时的堆栈设计,这些统统引入到我的内核中,这个时期的内核每天只能用于自我模拟实现,无法投入生产,感谢那段苦逼的平安工 作,一度让我看到了生命的惨淡,但是,也就是因为这段时期的惨淡,让我心无旁骛的去升华内核,庆幸的是我在平安的工作经历仅仅之后半年,半年后,带着给我 的内核框架进入现在的公司。

      
---------------------  第三章 破土时代 --------------------------------------------- 
      进入现在的公司后,职位是 架构师职位,第一件事情就是引入全新的开发框架,并在公司内部推广,尽管我自己模拟了大量的业务流程实现,但是投入到实际应用中,还是遇到不少的问题,这 些问题不是来自业务流程的复杂性,而是我这套内核的思维灌输与培训上,这种模式很少被人接受,特别是熟悉ssh 等框架人而言,这里我要感谢公司领导的大力支持与肯定,让内核框架逐步的推广与发芽,就目前写文章时,也恰好一年的时间,在这段时间了,内核是我架构动力 的源泉,可以灵活应对各种的改动与扩展,都可以有惊无险的平滑过渡,到现在为止,已经成为一个稳定的内核,支撑公司产品的研发,然而使用的过程中,也让我 对程序有了进一步的改进,这种改进就是引入插件机制,这个来由于公司数据层的策略,从jdbc 到 webservice 成为访问数据层的渠道,为此我不得不一再修改内核扩展标签,再后来,干脆把流程引擎 与 扩展剥离出来,成为用户自我定制的基于插件化的内核,现在的内核,用户可以按照自己的需要来扩展任意的标签(目前在公司尚未开放,需要一个过程,该过程应 该仅仅针对架构组开放),随着使用,也不断的给内核提出新的挑战,到目前为止,我自己在家里重写了内核,对内核进行更加清晰的模块划分,引入异步流程监 听、重写编译寄存器等

    
     
---------------------  第三章 开源时代 --------------------------------------------- 
      到目前为止,我在家里优化的内核已经接近完成,他仅仅是个内核,不是什么框架,例如spring 是一个框架,但是他的内核是 IOC 容器,Eclipse是一款IDE 但其内核是 OSGI ,我在这样类比,就是再次定位 内核的定位于使用,他仅仅是一个内核,一个程序流程解析器,一个扩展自定标签的内核代码,他不是什么框架,在稍后的时间段里,我会陆续把我的设计思想分享 到我的 技术 blog 上,希望有兴趣的人士,持续关注。blog地址:http://my.oschina.net/qfhxj

-----------------------------  写完这篇文章 截至时间 2013-12-21 12:01  买菜做饭,生活还是放在第一位的

你可能感兴趣的:(#技术分享# “乐高”内核的诞生)