贡献式编程(二)

来源:互联网 发布:2016域名投资趋势 编辑:程序博客网 时间:2024/05/17 02:36

前面说到一个订单系统,需要显示下载回来的订单。由于业务发展,系统需要做一些调整

变更

系统需要扩展,需要支持第二个平台(如 eBay)。要下载第二个平台上的订单,也要在UI上显示得到订单的明细。

第二版(第一稿)

由于开发时间所限,我们做了以下操作:

  • OrderDownloader 更改名字,成为 AmazonOrderDownloader
  • 多写一个叫 EBayOrderDownloader
  • 在定时器多添加一个调到EBayOrderDownloader上
  • 订单数据结构保持不变,显示不变

可以下班了!

等等!如果数据结构保持不变,订单数据结构肯定会对Amazon倾斜,EBayOrderDownloader会有很多适配的代码。

同时由于通常用户需求的不明确,通常UI显示不到 eBay 特有的订单数据项,会感到郁闷,投诉在上线后开始来了。

回头看看,我们这次变更的贡献在那里?

  1. 多了一个 EBayOrderDownloader 对象
  2. 定时器多了一个调道

分析思路:定义贡献单元

从需求上,一般人可能只看到[增加了一个平台下载任务]。但这个需求背后隐藏了另外一个需求,就是[添加平台的可能性]。

需求到技术上,通常需要设计和落实的[添加平台的可能性]如何达到呢?

最理想的就是用JAR(或者是DLL,按语言不同会有所不同)包来交付。一个JAR包是:Amazon.jar 另一个是 eBay.jar。添加一个平台就只需要把JAR包放到特定地方。

这个是框架性的调整,是整个[贡献式编程]的核心思想和基础框架支持。可能有人会用不同的方式去实现:Java SPI,OSGi 等,具体实现插件的框架很多,在此不做详细描述。

我们定义了贡献的单位,为一个JAR包,我们就可以按照此思路去重构。

0 0