贡献式编程(四)

上次说到需求开始提出不同的订单数据需要差异化地显示,如 Amazon 订单,要把 Amazon 订单的独特性显示出来。我们分析过数据后,有必要把共性的数据抽取出来(所谓平台中立的数据),有别于平台特有的字段。

订单明细的显示,分开两个区域:

  • 一个区域显示通用字段
  • 一个区域显示平台特有字段

根据贡献的思维方式,[平台特有区域]就是需要贡献的地方。

UI变更

前台无论用什么技术实现,贡献式编程的思维没有不同。我们就假设用最简单的UI技术:HTML。

在第一版的时候就有个明细界面,现在就根据需要划分成为两部分。要显示平台特有字段的,大概就是一个<div>区域。在DIV中嵌入平台插件所贡献的部分。

第三版

OrderSystem多定义一个接口:IDisplayPart,这个 IDisplayPart 定义为一个可以输出 HTML 的函数: 

HTML render(Order order);

OrderSystem现在有两个可被贡献的部分:

  • IOrderDownloader
  • IDisplayPart

我们开始觉得这两个接口有些共同点,就是添加一个平台大概都需要实现这两个接口,简单的我们可以一个对象实现了两个接口。不过这样不利于之后的扩展:如处理流程的不同。我们决定用一个类封装一下。IPlatformPlugin。这个 IPlatformPlugin 提供这两个接口:

public interface IPlatformPlugin {
    /**
      * 负责提供OrderDownloader实现类
      */
    IOrderDownloader getOrderDownloader();

    /**
      * 负责提供IDisplayPart实现类
      */
    IDisplayPart getDisplayPart();
}

好!贡献的粒度扩大了。前一个版本只是贡献单个接口,现在就可以提供多几个接口了。

结果是:

  • OrderSystem 定义了 IPlatformPlugin
  • Amazon、eBay等JAR实现了 IPlatformPlugin 和 需要的接口:IOrderDownloader 和 IDisplayPart
  • 界面通过订单的不同类型,来选择应用不同的 IDisplayPart 来显示这个特别区域
真正可以下班了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值