一、目标

主板模式提供两种接口(Interface),让我们自己能掌握系统架构里的接口制定权,拥有话语权,所以是一种强势型设计模式(Design Pattern)。基于自己的主板接口,整合PHP(如IWebShop)、Spring和DBMS等外来平台框架,让这些外来的平台框架都成为可被我们抽换的架构性碎片或插件(Plugin)。

  基于自己主板而制定(通用性)接口,成为各服务器之间的必经渠道,我们可以有效监控交易(Transaction)流动和流量,例如我们可以设计一个”看门狗(watch dog)”的类来监控交易流量。

   随着业务和系统的成长,将会在自己的主板上增添更多的类(如watch dog类),逐渐形成我们自己的平台框架(Framework)了。基于自己制定的主板、接口和框架,才能让外来平台框架成为可抽换,可新陈代谢的模块,以避免我们的成长受制于外来平台的接口和功能,确保我们能弹性成长,支撑成千上百万的业务应用功能,并稳定、永续茁壮。

 

二、采取主板模式,组合外来平台

  首先拿基于PHP的iWebShop和Spring两个外来的平台框架为例。

    

spring是什么与python的区别 spring和php_spring是什么与python的区别

 我们来将两者分离,如下图:

    

spring是什么与python的区别 spring和php_App_02

 

让两者便成为Loosely-Coupled,,如下图:

    

spring是什么与python的区别 spring和php_App_03

 

首先,设计自己的<通用性接口>,如下图:

    

spring是什么与python的区别 spring和php_Business_04

 

三、循主板模式,设计父类来实现(Implement)接口

   从业务应用(App)开发的视角来看,我们会在iWebShop框架里撰写特殊性业务逻辑,成为iWS App软件,并调用Sring框架里的共享性企业逻辑(Business logic, or Business object),以及DB Server里的数据。这iWS App可以掌握跨界的通信接口,例如iWS App可包含两部分:iwsActivity(扮演proxy角色)和iwsService(扮演stub角色)。其分别置于分界线的两边。如下图:

     

spring是什么与python的区别 spring和php_父类_05

    

最典型的调用流程是:

     

spring是什么与python的区别 spring和php_Business_06

定义我们自己的通用性接口,并且撰写抽象父类去实现它,如下图:

     

spring是什么与python的区别 spring和php_Business_07

  

其典型的调用流程是:

     

spring是什么与python的区别 spring和php_App_08

上述通用性接口和抽象父类的组合,就成为软件主板了。如下图:

     

spring是什么与python的区别 spring和php_App_09

这是大家所熟悉、典型的软件主板结构了。

     

spring是什么与python的区别 spring和php_App_10

 

四、工厂设计模式(Factory pattern)与主板模式的结合

  我们可以在软件主板里,增添一个工厂模式(Factory pattern),成为更精致、更具有智慧的软件主板了。于是,设计一个absFactory父类。如下图:

     

spring是什么与python的区别 spring和php_父类_11

此外,再增添一个BridgeLib模块,如下图:

        

spring是什么与python的区别 spring和php_Business_12

 

就成为一个智能、有效的软件主板了。如下图:

        

spring是什么与python的区别 spring和php_App_13

 

其典型的调用流程,分为两的步骤:1)获取Service;2)透过通用性接口来调用Service。

 

五、主板的调用步骤(1):获取Service

  •   步骤<1a>:透过BridgeLib模块调用Factory,来创建iwsFactory对象,然后回传(return)此对象的通用性接口。

      

spring是什么与python的区别 spring和php_Business_14

(步骤<1a>)

  • 步骤<1b>:BridgeLib模块调用myFactory,来创建iwsService对象,然后回传(return)此对象的通用性接口。

     

spring是什么与python的区别 spring和php_App_15

(步骤<1b>)

六、主板的调用步骤(2):透过通用性接口来调用Service

  • 在上一小节的步骤<1b>里,BridgeLib将iwsService的通用性接口回传给iwsActivity。
  • 于是,在这步骤<2>里,iwsActivity就透过通用性接口调用到iwsService和Spring框架了。

     

spring是什么与python的区别 spring和php_spring是什么与python的区别_16

(步骤<2>)

七、主板的优越特性

  • 通用性接口是我们自己设计和掌握的,让iWebShop与Spring变成松偶合(loosely-coupled)。
  • 因此,iWebShop/iwsActivity除了Spring之外,还可以搭配其它后台框架,例如GAE云平台等。
  • 只要我们的通用性接口维持不变,iWebShop/iwsActivity等前端的全部代码都可以不受影响。不但可以节省改版成本、快速改版之外、系统升级过程中的稳定度,还具备衔接到各式各样云平台的无限扩充能力。

 ~ End ~