`
snoopy7713
  • 浏览: 1156794 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

软件体系结构:二维分层、模块化和开放平台

    博客分类:
  • OSGi
阅读更多

先引出几个问题。首先,对于分层,如何来分层?仅仅纵向分层是否够用了?什么是“二维分层”呢?一提到模块化,很多人会说“我们的系统就是基于模块化来构建”,稍微一多问,要么和分层差不多,要么就说我们是基于一个又一个的dll文件来实现模块化的,那应该怎样才算模块化呢?“开放平台”怎么回事?

关于“二维分层”软件体系结构的提法比较少见。不过,对于分层软件体系结构,估计是个傻子都知道。“模块化”也是傻子都知道的一个词,软件工程最经典之一的词莫过于“高内聚、低耦合”。

在我个人看来,软件体系结构不是套路,而是根据实际应用系统的需求来确认的,甚至有时候需要根据实际情况来组合使用经典的“三层”、“管道”等软件体系结构风格。但不管怎样,从最最抽象的角度来看待一个软件系统时,软件系统就可以抽象成如下的结构,即应用系统总是由一个又一个功能构成的,而每一个功能总是由一段又一段的代码来构成的。

image

在这里每一个功能的代码段并不完全一致,当我们应用传统的分层软件体系结构来设计应用系统时,我们总是需要预想整个应用系统大致的代码,然后为大致的代码做一个归类,从而制定每一个层次大致的功能及其规范,每一层次一般也就包含了相应功能的代码段,理想状态下,这样的体系结构可能如下。

image

聪明的你肯定看出来,为了使用统一的分层架构来设计所有功能,那么在一个层次都必须包含了不同模块相似逻辑代码,那就有可能出现一种情况,就是一个层次在不同模块的编码实现复杂度也不一定相同,比如在上图的层N设计中,功能2的代码段N要比其它两个模块的代码段简单的多得多,如果这种异常情况在一个应用系统出现多次的话(特别是在大规模应用系统,这将是很常见的事情,就像原来我在Sybase工作时,数据管理、数据监控、数据复制等功能的复杂度都不一样),为应用系统统一设计的分层在异常情况下就显得特别的别扭。因此,我觉得在这种情况下,仅关注代码纵向行为而设计的分层软件体系结构是不够的。除了考虑纵向代码行为,我们还需要关注软件系统的整体功能。从“二维”的角度分解软件,“二维”的核心就是:从横向维度考虑软件系统的功能组成,从纵向维度来考虑每一个功能的代码行为,将若干个功能组合在一起作为纵向分层的单元,即“将若干功能横向切割成不同的模块,对每一个模块进行统一的分层架构”。

image

关注“二维”的分层软件体系结构会使架构的设计更加适合实际应用系统,不过,需要注意的是,横向维度关注的是应用系统的功能,因此,横向切割必须以功能为单元来组织,这也就意味着,模块是由若干个功能构成的。这样,构建的模块间的依赖也比较小。这话的意思,就是要强调,模块不是以纵向层次来划分的,因为纵向层次具有很强的代码依赖关系,一般而言,上层是完全依赖于下层的。

关于分层的话题,本文就描述到这里,欢迎大家能围绕这个问题继续展开。接下来,我们再来谈一下模块化。

在我给客户推荐OSGi模块化的优点时,很多客户会说“我们的应用系统就是基于模块化来构建的”,好,那我们来交流一下模块化。一旦深入讨论之后,就会发现不少客户的模块化就是所谓的分层,或者所谓的程序集就是模块化。而一旦再深入讨论模块的可复用性、隔离性、可维护性和隔离性时,客户会简单的说,我们拷贝代码或者拷贝dll过来就复用了。如果再深入问下去的话,会发现并不仅仅拷贝就解决了复用的问题,在拷贝的同时需要大量的修改。呵呵,这非常的有意思,:)。关于模块化,我非常推荐OSGi规范(我们也实现了OSGi.NET规范)提倡的模块化。在这里的模块,是一个完全物理隔离,可以动态部署、动态更新、动态卸载、动态启动与停止,所有的模块都可以躺在模块仓库中,以备我们真正使用“搭积木”的方式构建系统。从OSGi的角度来看,我们可以为应用系统设计一个大致通用的企业级总体架构,如下所示。这个架构实际上,还可以设计的更加开放一些,可以适合于传统软件和目前流行的云计算软件以及开放平台软件的构建。

image

在这个系统架构图中,一个应用系统由客户端、服务端、模块仓库三部分构成。客户端和服务端基于模块化构建,相应的模块称为功能模块和服务模块,这里面的模块均从模块化仓库获取,可以实现自动更新、远程动态管理与部署、模块多版本并存。每一个功能模块按照要实现的功能复杂度进行个性化的模块体系结构设计。这是一种理想化的状态,正如《未来10年:OSGi、Spring DM》作者罗时飞描述的OSGi提倡理念一样。事实上,我的老雇主Sybase也是基于这样的思路来构建Sybase Central和Sybase Control Centre产品的。

目前我团队也在致力于在.NET平台上实现这么一个理想化的模块化平台,并基于这个模块化平台实现一个“大和”的统一开放平台,目前已经取得了不错的进展,该平台的体系结构如下所示。

image

我们希望通过这个平台来集中广泛的开发者们的聪明才智,构建一个庞大的插件仓库,让不同的开发者、不同的最终软件客户都可以从这个统一开放平台受益。这样构建的软件系统才是我心目中最理想的真正的“模块化”!

当然,很多事情都是说起来容易,做起来困难,不过,这并不代表不可能,至少我们已经通过一点一滴实践了这样的模式。文中的描述也可能疯狂或者有偏差,欢迎任何指正。

转自:道法自然   http://www.cnblogs.com/baihmpgy/archive/2011/05/22/2053742.html

分享到:
评论

相关推荐

    --智慧建筑可视化运维管理平台解决方案GIS & BIM & FM 智慧楼宇可视化运维管理平台解决方案.doc

    智慧建筑可视化运维管理平台解决方案是一种集成GIS(地理信息系统)、BIM(建筑信息模型)和FM(设施管理)技术的高效管理系统,旨在提升楼宇的运营效率和维护质量。该方案结合了现代信息技术与建筑行业的专业知识,...

    软件工程-理论与实践(许家珆)习题答案

    答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、维也纳开发方法(VDM)和面向对象的开发方法。 6. 软件生命期各阶段的任务是什么? 答:软件生命期瀑布模型分为六个阶段: ...

    智慧管廊大数据云平台建设和运营整体解决方案.docx

    ### 智慧管廊大数据云平台建设和运营整体解决方案 #### 一、智慧管廊概述 **1.1 设计依据** 智慧管廊的设计依据主要包括国家相关法律法规、行业标准以及地方性规定等。这些依据为智慧管廊项目的规划、设计、建设...

    《信息系统项目管理师考试全程指导》笔记

    - **典型体系结构**: 分层架构、微服务架构等。 - **设计方法**: 包括组件化设计、模块化设计等。 - **分析与评估**: 对体系结构进行性能、安全性等方面的评估。 - **软件中间件**: 提供通用服务的软件层。 **4.4 ...

    基于SolidWorks的压塑模CAD系统研究.pdf

    这样的设计结构有助于系统更加模块化,方便了设计师根据需要快速构建和修改模具设计。 工作流程遵循自顶向下的策略,整个设计过程包括以下几个步骤: 1. 产品建模:建立产品全息模型,包括结构形体特征、材料属性...

    车辆制动器CAD系统的研究与实现.pdf

    系统的体系结构是分层的,由上至下,每一层实现对下一层的控制。这种设计使得系统在功能上具有良好的模块化,便于维护和扩展。同时,系统提供了一个开放的扩充接口,意味着可以根据未来的发展和需求不断引入新的组件...

    《数据结构》课件的脚本设计.pdf

    多媒体技术的综合应用,如文字、图形、图像、声音、视频影像以及二维三维动画等,使得教育课件更加生动、直观,极大地提高了教学效果和学习者的兴趣。 《数据结构》是计算机科学与技术专业中一门重要的基础课程,它...

    symbian体系架构图表

    Symbian 9.1的体系架构图详细地描绘了该系统的分层结构和模块划分,为开发者提供了清晰的开发指导和技术支持。 #### 二、Symbian 9.1体系架构分析 ##### 1. Java 运行环境及应用框架 Symbian 9.1支持Java应用程序...

    基于Lego机器人的低成本SLAM方法设计.pdf

    这里所说的Lego机器人主要指的是Lego MindStorms EV3系列产品,该系列产品具有模块化设计,可组装成不同形态的机器人,并且支持各种传感器和执行器,非常适合教育和研究使用。 文章介绍的SLAM实现方法采用LeJOS软件...

    架构师的6个目标15项修炼

    1. **静态设计维**:通过模块化的方式对代码进行组织,使得各个模块之间既相互独立又紧密相连。 - **模块划分**:根据功能模块的不同,将代码划分为多个子模块,便于后续的并行开发和维护。 2. **动态设计维**:...

    2004年武汉大学地理信息系统考研真题

    - **投影坐标系统**:通过数学变换将地球表面的三维坐标转换为二维平面坐标的过程。投影坐标系统广泛应用于地图制作,因为它能够将地球表面的信息准确地展示在平面上。 **4. 地理实体和地理目标** - **地理实体**...

    UGNX 4。0 CAE教程pdf

    - **3D扫掠网格:** 通过沿着特定路径复制二维网格来生成三维网格。 - **通过壳产生的实体单元:** 介绍了一种特殊的三维网格生成方法,主要用于壳体结构。 #### 二维网格划分 - **2D网格概要:** 对二维网格的概念...

    Computer Vision: Algorithms and Applications(Richard Szeliski)

    本书的核心之一是结构运动与三维重建,它详细讲解了二维和三维特征对齐、姿态估计、几何相机校准、三视图结构运动、光束平差法以及结构运动的约束。此外,还涉及了稠密运动估计、参数运动、基于样条的运动、光流法和...

    代码之美(中文完整版).pdf

    14.1. 计算机体系结构对矩阵算法的影响 14.2 一种基于分解的方法 14.3 一个简单版本 14.4 LINPACK库中的DGEFA子程序 14.5 LAPACK DGETRF 14.6递归LU 14.7 ScaLAPACK PDGETRF 14.8 针对多核系统的多线程设计 14.9 ...

    VesselNetworkAnalyzer:一种从船只网络文件及其各自的二进制掩码量中提取与统计相关的特征的软件工具

    它是《出版物“整个产后和成年小鼠大脑中三维血管网络体系的分层成像和计算分析”中使用的处理管线的一部分。 它收集有关分叉,节段,血管体积和血管外距离的信息。 该信息存储为每个主题的CSV文件,可用于创建...

Global site tag (gtag.js) - Google Analytics