贡献式编程(总结)

之前的几篇文章,目的是介绍一个贡献式编程的思考方式,暂时姑且叫Contribution-Driven-Development(CDD)吧。

  1. 贡献式编程(一)
  2. 贡献式编程(二)
  3. 贡献式编程(三)
  4. 贡献式编程(四)

总结

目的

程序员的抽象能力通常透过项目的实战经验累积下来的,可能在累积的过程中途放弃了。在我个人经验中,能有抽象能力和模块化的能力的人不多,所产出的程序也不具备可扩展性。所以提出所谓 CDD 的思维方式来帮助各位。

CDD不是什么新鲜的事物,只是一些经验的总结,在很多项目都会使用的技巧。我在当初接触 Eclipse 插件开发的时候,就深深被这种思维方式所吸引,任何部分都预留空间让其他插件开发者发挥。

步骤

总结这个思维方式,有几个步骤可以参考:

  1. 实例分析:任何修改我们都需要用一个实例开始,分析可能需要的扩展
  2. 定义贡献单元
  3. 选择提供贡献的基础框架,一般是动态加载的框架
  4. 分别基础框架建设和贡献单元,进行技术重构
  5. 持续优化贡献的粒度大小,太小太大都不理想

原理

贡献式编程具体化了Hollywood Principle(Don‘t Call Me, I‘ll Call You)。贡献就只是贡献,原则上贡献是被动的,所以根本的思维上和一般 IoC 框架兼容。

系统的基础框架建设负责加载各个贡献,组织如何调用各个贡献,是主体、是启动系统的入口。

我们也具体化 Divide-and-Conquer 的实际操作,让大型系统的开发变成多个小部件。

使用好处

  1. 模块化系统部件,管理上、人员分配上都形成了自然分工的好处
  2. 每一个贡献的可测试性很强,TDD等可以较顺利切入
  3. 模块的依赖关系比较清晰,可以单独处理模块升级,也可以隔离单个模块的错误
  4. 贡献变得容易,形成自己的系统生态圈
  5. 开发者入门相对容易,不需要看大面积的文档和代码
  6. 结合持续交付,能快速实现系统升级

后语

一个系统的可扩展性,是这个系统生命力的所在。容易扩展,容易修改,容易做出贡献,生生不息。希望这个思维方式能成为培训程序员的一个重要标准。

时间: 2024-11-26 05:34:00

贡献式编程(总结)的相关文章

[译] Swift 的响应式编程

原文  https://github.com/bboyfeiyu/iOS-tech-frontier/blob/master/issue-3/Swift的响应式编程.md 原文链接 : Reactive Swift 原文作者 : Agnes Vasarhelyi 译文出自 : 开发技术前线 www.devtf.cn 译者 :Mr.Simple 校对者:Lollypo 状态 : 完成 让我们首先回到Apple刚推出Objective-C的继任者-Swift的时候,那真是一个非比寻常的时刻. Sir

16防御式编程2

一 辅助调试的代码 1. 不要自动地把产品版本的限制强加于开发版之上 ? 程序员们常常有这样一个误区,即认为产品级软件的种种限制也适用于开发中的软件.产品级的软件要求能够快速的运行,而开发中的软件则允许运行缓慢.产品级的软件要节约适用资源,而开发中的软件在使用资源时可以比较奢侈.产品级的软件不应向用户暴露可能引起危险的操作,而开发中的软件则可以提供一些额外的.没有安全网的操作. ? 我曾参与编写的一个程序中大量地使用了四重链表.链表的代码是很容易出错的,链表本身的结构很容易损坏.因此我给程序加了

Unity基于响应式编程(Reactive programming)入门

系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoTween&Unity Native2D实现 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画 时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率 背景 前有慕容小匹夫的一篇<解构C#游戏框架uFrame兼谈游戏架构设计&

javascript-链式编程

  <script type="text/javascript">          function Person(){     this.name='li4'     this.age=20     this.eat=function(){console.log('eating ...')}     this.sing=function(){console.log('sing ...')}    }        var p1=new Person()    conso

ReactiveX--响应式编程の相关概念 浅析

在许多软件编程任务中,你或多或少期待你的指令将会按照你已经写好的顺序,依次增量执行和完成.但在ReactiveX,很多指令可以通过“观察者”并行执行,其结果将以任意顺序被捕获.你定义了一种“可观察的形式“的检索和转换数据机制而不??是调用方法,然后订阅观察者给它,每当之前定义好的机制已经准备好了,这些机制就会触发常设的哨兵去捕获并反馈结果. 这种方法的优点是,当你有一大堆的任务是不相互依赖,你就可以同时执行他们,而不是等待每一个来启动下一个前完成,这样你的整个任务包只需要花最长的任务时间. 有很

RAC响应式编程

RAC响应式编程开源地址:https://github.com/ReactiveCocoa/ReactiveCocoa# 作者 cbsfly_iDev 2016.01.04 21:06* 写了13984字,被134人关注,获得了134个喜欢 学习RAC小记-适合给新手看的RAC用法总结 字数1855 阅读4287 评论4 喜欢33 最近叶大直播写代码,我也做点小笔记. 什么是RAC? 几乎每一篇介绍RAC的文章开头都是这么一个问题.我这篇文章是写给新手(包括我自己)看的,所以这个问题更是无法忽视

深入浅出iOS函数式编程与响应式编程概念

简介 本篇文章主要回顾一下——iOS函数式编程 && 响应式编程概念,如何一步步实现函数式编程的过程,对阅读Masonry && SnapKit源码有一定的帮助. 图片描述 作为一个iOS 开发者,那么你一定用过Masnory/ SnapKit: Masonry是一个OC开发中,非常好用的自动布局的第三方框架: SnapKit是Masonry团队打造的Swift版本的自动布局框架: 如果你没有用过,在自动布局中用的是苹果原生的或者原生的升级版VFL语言,那我只好为你点“赞”

论文式编程

文学编程 文学编程(Literate programming)的一些概念,上个世纪 70 年代就有人提出来了. 文学编程的思想非常简单,就是将那些为了能被编译器/解释器正确识别而编写的代码打碎,然后用人类语言将它们编织到文档中,这种文档就是文学编程的源文件.这一概念第一次被完整的实现,是 Knuth 开发的 WEB 工具(此 WEB 并非现代漫天飞舞的那个 Web).Knuth 的神作——TeX 系统便是借助 WEB 开发的. WEB 工具由 tangle 与 weave 这两个程序构成.tan

数往知来 JQuery_选择器_隐式迭代_链式编程 &lt;二十&gt;

一.通过js实现页面加载完毕执行代码的方式与jquery的区别 1.通过jquery的方式可以 让多个方法被执行,而通过window.onload的方式只能执行最后一个, 因为最后一次注册的方法会把前面的方法覆盖掉 1. window.onload需要等待页面的所有元素资源比如说img里的图片一些连接等等都下载完毕后才会触发: 2. 而jquery只要页面的标签元素都下载完毕就会触发了 二.$.map(数组,function(ele,index){})函数对数组进行遍历,遍历之后会返回一个新的数