`
阅读更多
软件体系解构是一个比较抽象的概念,按我的理解,可以将其比作一个书架。书架的产生过程大概如下:(1)没有太多的书,想怎么摆都行,不至于太乱、难以分类和查找;(2)越来越多的书籍,你需要考虑是横着排列,还是竖着排列呢?横着排列的话,很容易倒不说,而且很难找到自己想要的且书籍;竖着排列的话,容易找到自己需要的书籍,但是太占地方,而且如果把书竖着摆条长龙的话,拿出几本书后,需要重新整理;(3)因此,我们考虑使用一个架子,这个架子分成几层,每层竖放一排书;(4)在书更多的情况下,需要对每一层加上一个格子,并且为每一本书和每一个格子打上标签;(5)随着时间推移,书架就组成一个图书馆了。软件体系结构对于软件系统构建的作用类似于书架对图书馆的作用了,同时对它的探索也类似人类对图书馆架构优化的探索。这段比喻只是让人初步理解一下它的概念,对其理论在此不作讨论,如果有兴趣的话,可以直接看点书。本文接下来将讨论一下笔者喜欢的一个体系结构。

一个软件系统向用户提供了若干功能,用户使用的每一个功能,我认为,是一种软件纵向代码执行的过程。换句话说,即软件系统是由横向的功能组成,每一个功能的应用是一种纵向代码执行的过程。举个例子,当用户想查询某个股票的行情的话,它会输入一些信息到软件系统,软件系统获取用户输入、执行校验、查询业务逻辑处理、路由到网络某个终端、运行查询服务、执行数据库访问、返回服务结果、经过业务逻辑处理、呈现到用户界面,这种行为从软件系统代码的执行角度来看,可以说是纵向的行为。这种纵向行为中的每一个活动都与前后活动相互关联,在代码中也呈现出直接的依赖。可以这么说,经典的分层体系结构是对横向软件功能的纵向代码的分类,从而划分层次。最初的分层结构是3层体系结构,即根据软件系统各个功能的纵向行为,划分为业务层、逻辑层和数据访问层,随着软件系统日益复杂,开发人员为软件系统抽象了更多类别(层次)的活动,出现了另一7层经典的分层结构。

单从软件系统本身而言,其复杂性由横向(系统功能)复杂度和纵向(涉及的业务逻辑和技术)复杂度组成。分层结构的出现,容易让人只是关注软件的纵向复杂度,对于越复杂的软件系统,我们需要划分成更多的层次。然而越多的层次,意味着更多、更复杂的层间依赖,也使开发、调试变得越来越复杂,在我看来,有点违背了“KISS”原则。当然,有人会说,这已经是最优方案了,也就是面对复杂系统,无奈的最优方案。幸运的是,人们已经发现了这些问题,并衍生了一系列的经典的开发框架,如MVC/MVP/MVVM,IOC,AOP,ORM。这些框架的出现大大降低了复杂系统的复杂性。不过,框架的大量应用,降低系统复杂性的同时,也意味着我们首先需要再付出相应的代价来使用这些框架,引入了更多的编程规则,从另一角度来看,也相应的增加了复杂性。举个例子,一个对象直接依赖另一个对象,肯定要比一个对象通过IOC容器依赖另一个对象来的简单,因为后者不直观而且还应用了新的框架。因此,这种只关注软件纵向活动的分层体系结构是有很大缺陷的。(PS:对于IOC框架,对于我来说,则是能不用最好不用。我想它对我们最大吸引力的地方,就是我们在开发项目的过程中,可以根据需求变化,而直接修改配置文件或者更改少量的代码,避免陷入用户无休止的变更中。当然,IOC的应用也提高了代码的可测性。但是,利用IOC真正有价值的部分只有一点点,因此,我只是觉得按需即可。我以前喜欢追求有艺术的代码,什么是有艺术的代码呢?那就是要有技术含量,殊不知,简单就是艺术!)。

因此,我想换一个角度,从横向复杂度入手,对系统进行模块化切割,从而使得每一个模块尽量的独立且简单。一个纵向复杂度很低的模块,我们甚至什么框架都不需要用到,而且我们可以根据模块的纵向复杂度对每一个模块划分层次。不过,引入模块化进行系统架构,我们不得不解决:(1)如何组装模块?(2)如何解决模块的依赖关系?(3)如何确保模块的独立性,从而降低模块间相互影响?(4)如何开发、调试和部署模块?

OSGi规范的提出,为我们解决了模块化应用的所有问题。对于(1),在OSGi中,每一个模块被称为Bundle,即服务包,由Bundle清单文件、代码文件和资源文件组成。OSGi框架可以从一个文件、文件夹、URL中加载模块。OSGi完整定义了模块化应用系统的单元。对于(2),OSGi提供了2种方法来解决模块依赖:1)是在模块编码的时候,一个模块重用了另一个模块的功能,它通过模块清单的Import、Export、DynamicImport和Require配置来解决;或者是一个模块继承或在方法、字段的定义上使用了另一个模块的类,它将通过USE指令来定义。2)模块使用了另一个模块提供的服务,这种依赖只能在模块运行的过程中才能体现出来。对于(3),OSGi规范严格定义了框架类加载机制,由Java的ClassLoader代理网络,确保OSGi能够为每一个模块创建独立的类型空间,避免模块间类型的相互影响。对于(4),在开发和部署环节,IDE和OSGi规范已经提供简单、完美的支持,而对于本地调试和远程调试,IDE和运行时虚拟机也都完美支持。

总结:我喜欢的软件体系结构就是模块化(插件化) + SOA!通过模块化思路切割复杂应用系统,通过可管理的服务来解决模块依赖,尽量减少框架的使用和模块的层次,从而使得一切变得简单,达到“简单就是艺术”。
分享到:
评论
2 楼 ltian 2010-05-07  
我QQ:595534098
1 楼 ltian 2010-05-07  
可否交个朋友,交流一下!我对大型系统的开发部署一支很感兴趣!
能否留下QQ之类的联系方式呢?

相关推荐

    OSGI 开发文档中文的

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...

    OSGI 实例eclipse插件开发

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...

    osgi学习笔记(一)

    OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...

    osgi-resource-locator-1.0.1-API文档-中文版.zip

    赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...

    org.eclipse.osgi_3.7.0.v20110613及源码

    《深入理解OSGi:以org.eclipse.osgi_3.7.0.v20110613及其源码为例》 OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了动态模块化的解决方案,使得Java应用程序能够更好地管理和...

    osgi解决不同版本jar包冲突的demo

    OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个JVM上运行多个版本的相同库或服务,从而解决了不同版本jar包冲突的问题。本示例通过一个名为“myself”的工程,展示了如何...

    Felix_OSGi实作

    OSGi(Open Services Gateway Initiative)是一个由OSGi联盟(OSGi Alliance)维护和发展的开放性规范,它定义了如何在Java平台的基础上实现模块化编程和服务动态化。OSGi规范使得Java程序可以被设计成一套小型的、...

    OSGi入门教程(OSGi Introduce)

    OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...

    osgi介绍osgi介绍

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...

    OSGI整合Spring、Mybatis、Spring MVC实现一个登录应用案例

    OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序以模块化的方式构建,每个模块称为一个Bundle。在这个案例中,我们将探讨如何整合OSGI、Spring、Mybatis以及Spring MVC来...

    OSGI组件编程(osgi.component.programming)

    OSGI组件编程是一种在Java平台上构建模块化应用程序的方法,它由OSGi联盟制定标准,并被广泛应用于企业级软件开发,尤其是对于需要高度可扩展性和动态性的系统。在本教程中,我们将深入探讨如何使用Eclipse和Equinox...

    osgi,林昊写的osgi实战和进阶

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...

    osgi重要文档--osgi核心规范文档,osgi服务文档,osgi-最佳原理与实践(王昊编著,共79页)

    这个压缩包包含了关于OSGI的重要文档,分别是“OSGi R4核心规范文档”、“OSGi服务文档”以及“OSGi-最佳原理与实践”(王昊编著)。下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是...

    Enterprise OSGI in action

    《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...

    org.osgi.core-4.2.0

    标题 "org.osgi.core-4.2.0" 指的是一个特定版本的 OSGi(Open Services Gateway Initiative)核心框架库,版本号为 4.2.0。OSGi 是一个 Java 平台的模块化系统和服务平台,它提供了一种标准的方式来组织和管理 Java...

    OSGI规范中文版

    OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它提供了一种动态的、可扩展的框架,使得开发人员可以构建、部署和管理软件组件。本资源包含两本书籍:“OSGi原理与最佳实践...

    OSGI原理与最佳实践

    资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...

    OSGI 入门资料PDF

    OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...

Global site tag (gtag.js) - Google Analytics