上一篇《企业 SOA 设计(1)–ESB 设计》中,写到我们的 SOA 设计分为两个层面来进行:一个是系统间的 SOA 设计,主要通过 ESB 来完成;另一方面则是单个应用系统内部的 SOA 设计,本篇将会就后者进行详细说明。

平台整体结构

在产品开发过程中,为了达到业务级别的较大粒度重用,我们需要把纵向把业务进行拆分,以业务组件的形式进行开发,并最终把多个开发完成的业务组件进行组合,形成最终的软件产品。

按照组件化开发的产品,是基于一个公共的产品开发平台来建立的。由平台来提供所有的底层设施。平台包括技术平台和业务平台两个层面。在技术层面上,平台提供了一系列的类库、框架、组件、工具,以及为业务组件化提供相应的技术支撑。在业务层面上,业务平台中积累了大量的封装完善的业务组件,以及一些常用的业务控件,以供开发新产品时进行选配。同时,平台还为整个软件过程提供一系列的其它支持,例如工具、设计器、管理界面等。

下图,是平台的整体结构图:

图中罗列了大部分的关键组成部分,细节本篇不述。

组件集成平台

对于一个独立的业务,我们可以将其封装为一个独立的业务组件,并最终放到组件库中。业务组件之间,则以服务、事件两种形式进行交互。要支持这种模式的交互,技术平台还需要提供几个技术框架:插件平台、服务容器、事件总线。

下图是组件集成架构:

  • 技术平台提供事件总线、轻量级服务总线。
  • 组件内部以领域驱动的模式开发,以领域实体框架作为基础框架。组件内、组件间,也都是面向领域实体来进行交互。
  • 组件向外部的其它组件提供组件事件、组件服务。外部组件也只能直接调用组件提供的服务,或者监听组件的事件。
  • 组件还提供了一些可重用的 UI、一些可直接使用的分布式服务。
  • 整个应用系统在组合多个业务组件后,再开发一些特定的功能、UI 就可以完成一个完整的系统了。

产品构成

下图是一个完整产品的组件构成图:

由于我们的产品开发平台必须要支持 721 客户化定制,所以同一个业务组件还对应不同的业务通用级别进行划分:Organization Common 表示组织架构组件最通用的部分,Org Part1 表示组织架构组件的可选包。而 Customiztion 则可以对引用的业务组件做深入的定制和扩展,而不需修改引用组件的代码。

可以看到,对于整个产品来说,在引用了业务组件库中的一些业务组件后,就可以组成了产品的基础功能。Customer App Component 中是应用系统在组件的功能基础上需要再做的工作:完成产品的额外功能,并通过平台接口为一些组件做相关定制。

组件内部架构

对于单个的业务组件,其内部的架构依然采用领域驱动的分层架构:

图虽大,但并不复杂,就是领域驱动的经典分层:Distribute(DTO 接口层)、Application(应用层/领域逻辑层)、Repository(仓库)、Domain(领域实体)。

重点在于 Domain 包,它不但包括领域实体,还包括了组件事件、组件服务接口,这些都是领域的核心。

位于底层的技术平台,提供一系列支持:IOC/AOP、属性扩展框架、领域实体框架、721定制化框架、数据库生成框架等……

结尾

其实,组件化架构设计中,最为复杂是分析出一个封装完好的组件,所要面向的使用者是哪些,这些使用者分别对组件有哪些需求,而这个架构如何满足这一系列需求。例如,我们在设计过程中,对这些方面进行了分析:组件自身的发展需求、组件中各组成部分的可扩展性、组件间的交互需求、系统集成需求、项目组定制化需求、系统外交互需求、易用性。

欢迎感兴趣的朋友交流。

企业 SOA 设计(2)–组件化产品开发平台的更多相关文章

  1. 企业 SOA 设计(1)–ESB 设计

    最近为公司完成了一个 ESB 的设计.下面简要说明一下具体的设计方案.   企业 SOA 整体方案 在前一篇<SOA.ESB.NServiceBus.云计算 总结>中说到,SOA 是面向服 ...

  2. 基于SOA的组件化业务基础平台[转]

    转自https://www.ibm.com/developerworks/cn/webservices/1111_xiaojg_soa/index.html 业务基础平台是业务逻辑和基础架构平台之间的 ...

  3. 基于 SOA 的组件化业务基础平台

    业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 “应用软件的业务描述和操作系统平台.软件基础架构平台之间的交互与管理问题”.操作系统平台解决了“应用软件系统与硬件之间的交互与管理问题” ...

  4. 组件化网页开发 / 步骤一 · 4-4 匹配HTML标签

    组件化网页开发 / 步骤一 · 4-4 匹配HTML标签

  5. SuperMap iObject入门开发系列之一组件式GIS开发平台介绍

    本文是一位好友“炀炀”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢.平台介绍:SuperMap iObjects Java/.NET 是面向GIS应用系统开发者的组件式GIS开发平台,具有强 ...

  6. 迅为IMX6开发板适用于HMI|车载电脑|工业控制|医疗仪器|智能家居 灵活进行产品开发平台

    i.MX6开发平台行业中的应用 适用于HMI.POS机.车载电脑.工业控制.轨道交通.医疗仪器.智能家居.数据终端等行业. 迅为iMX6开发板采用核心板+底板结构设计,高品质,稳定性强,可以更灵活地进 ...

  7. 组件化网页开发 / 步骤二 · 2-11 jquery的ajax方法 以及下一章跨域没懂

    1,根据2-11课程老师的提示,自己封装 $.ajax 2,第三章,跨域,没看懂

  8. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  9. App 组件化/模块化之路——构建开发架构思路

    App 组件化/模块化开发架构思路 随着业务的发展 App 开发技术也越来越成熟,对开发者来说 App 代码量也迅速地增长到一个数量级.对于如何架构 App 已经每个开发者面临的实际问题.好的架构可以 ...

随机推荐

  1. c = (a / b, a%b) 运算输出顺序

    #include<iostream> int main() { using namespace std; int a, b, c; a = ; b = ; c = ; printf(&qu ...

  2. io.js的服務器突破

    Node.js与io.js那些事儿 InfoQ中文站 05月20日 14:26 去年12月,多位重量级Node.js开发者不满Joyent对Node.js的管理,自立门户创建了io.js.io.js的 ...

  3. 基于OWin的Web服务器Katana发布版本3

    当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每天访问 Internet 的时间为 46 分钟,大约有 ...

  4. ABP理论学习之Nuget包

    返回总目录 本篇目录 框架 测试基 ABP已经发布在Nuget上,这里是所有包的列表. 框架 Abp Abp系统的核心包.所有其他的包都依赖这个包. Abp.Web 提供了MVC和Web API都使用 ...

  5. ENode框架Conference案例分析系列之 - ENode框架初始化

    前言 Conference案例是使用ENode框架来开发的.之前我没有介绍过ENode框架是如何启动的,以及启动时要注意的一些点,估计很多人对ENode框架的初始化这一块感觉很复杂,一头雾水.所以,本 ...

  6. LibSVM for Python 使用

    经历手写SVM的惨烈教训(还是太年轻)之后,我决定使用工具箱/第三方库 Python libsvm的GitHub仓库 LibSVM是开源的SVM实现,支持C, C++, Java,Python , R ...

  7. 相识HTML5 canvas

    Canvas是HTML的API,我们可以用它在网页中实时的来生成图像. 文章导读 1.必备技能 2.用于画图的函数 例子: -会话气泡-    -心形-    -钟表-      -星球里的星星- - ...

  8. Atitit.软件开发的几大规则,法则,与原则Principle v3

    Atitit.软件开发的几大规则,法则,与原则Principle  v31.1. 修改历史22. 设计模式六大原则22.1. 设计模式六大原则(1):单一职责原则22.2. 设计模式六大原则(2):里 ...

  9. iOS----- Crash 分析(文三)- 符号化崩溃日志

    未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了.所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字.这一步我们称之为符号化. 在iOS Crash分析(文一)中已经提到过符号化的 ...

  10. angularjs揭秘

    angularjs揭秘