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

我喜欢的软件体系结构——分层、模块化与OSGi

    博客分类:
  • OSGi
阅读更多
软件体系解构是一个比较抽象的概念,按我的理解,可以将其比作一个书架。书架的产生过程大概如下:(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!通过模块化思路切割复杂应用系统,通过可管理的服务来解决模块依赖,尽量减少框架的使用和模块的层次,从而使得一切变得简单,达到“简单就是艺术”。

转自: 道法自然 http://www.cnblogs.com/baihmpgy/archive/2009/11/15/1603566.html

分享到:
评论

相关推荐

    Java应用架构设计 模块化模式与OSGi.zip

    Java应用架构设计中,模块化模式与OSGi是两个关键概念,它们对于构建大型、可扩展且易于维护的系统至关重要。模块化模式使得代码组织更加有序,而OSGi(Open Services Gateway Initiative)则是一种实现模块化的动态...

    Java应用架构设计模块化模式与OSGi

    Java应用架构设计中,模块化模式与OSGi是两种重要的技术,它们对于构建大型、可扩展且易于维护的系统起着关键作用。本篇将深入探讨这两个概念,以及它们如何协同工作来提升Java应用程序的效率和灵活性。 首先,模块...

    OSGi_Java模块化框架的实现

    ### OSGi——Java模块化框架的实现与进化 #### OSGi概述 OSGi(Open Service Gateway Initiative)是一项面向Java的技术,旨在提供一个动态模型系统来支持Java平台上的模块化开发。随着软件系统的日益复杂,模块化...

    OSGi.NET-master.zip_c#osgi_osgi_osgi.net github_模块化

    标签"“c#osgi osgi osgi.net_github 模块化" 是对主题的关键词提炼,强调了C#语言、OSGi技术、OSGi.NET实现、代码托管于GitHub的事实,以及框架的主要特性——模块化。 **压缩包子文件的文件名称列表:** 由于只...

    osgi进阶——11111

    OSGi(Open Service Gateway Initiative)是一项由OSGi联盟发起的技术标准,它定义了一个动态的模块化网络,可以在Java应用程序中安装、启动、停止和卸载服务。OSGi技术主要用于构建动态化、模块化的应用程序和服务...

    Java应用架构设计 模块化模式与OSGi

    Java应用架构设计、 如何进行模块化模式、与OSGi有什么联系?

    《Java应用架构设计-模块化模式与OSGi》书中源码,美国 Kirk著,张卫滨译

    《Java应用架构设计-模块化模式与OSGi》是一本由Kirk著、张卫滨翻译的书籍,它深入探讨了在Java环境中如何构建可扩展、可维护的大型应用程序。书中的源码提供了丰富的实例,帮助读者理解并实践模块化模式和OSGi...

    OSGi与Equinox 创建高度模块化的Java系统 第5章 源码

    在"OSGi与Equinox 创建高度模块化的Java系统 第5章 源码"中,我们可以深入学习如何利用OSGi和Equinox构建模块化系统。这一章节可能涵盖了以下几个核心知识点: 1. **模块系统**:OSGi的核心是模块系统,它定义了...

    Java应用架构设计 模块化模式与OSGi,同时也包含了ArcGISAPIforJavascript开发教程的开发教程

    总结来说,本教程结合了Java应用的模块化设计与OSGi技术,以及ArcGIS API for JavaScript的开发实践,为IT专业人士提供了深入理解和应用这些技术的全面指南。通过学习,开发者不仅可以提升Java应用的架构设计能力,...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part2

    Java应用架构设计:模块化模式与OSGi 英文版 中文版介绍: 全球资深Java技术专家的力作,系统、全面地讲解如何将模块化设计思想引入开发中,涵盖18个有助于实现模块化软件架构的模式 中文目录: 第一部分 模块化...

    《osgi与equinox创建高度模块化的java系统》第五章源码

    在本章中,我们将深入探讨如何使用OSGi(Open Service Gateway Initiative)框架,特别是Equinox实现高度模块化的Java系统。Equinox是Eclipse基金会提供的一个OSGi实现,它允许开发者构建可热插拔的组件,使得系统...

    模块化系统的构建专家OSGI.pptx

    OSGi的模块结构是基于bundle的,每个bundle是一个独立的模块,能够动态地加载和卸载。 OSGi的模块结构包括三个层次: * OSGi Module Layer:提供了模块的管理和加载 * OSGi Life Cycle Layer:提供了模块的生命...

    OSGi与Equinox 创建高度模块化的Java系统 中文扫描版

    OSGi与Equinox 创建高度模块化的Java系统 This first part of the book introduces OSGi and Equinox, Eclipse’s implementation of the OSGi standard. Chapter 1outlines the history and context of OSGi. Its ...

    osgi学习笔记(一)

    在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和灵活的Java应用程序。 首先,我们需要了解OSGi的核心概念...

    osgi介绍osgi介绍

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

    读书笔记:《Java应用架构设计模块化模式与OSGi》源代码.zip

    读书笔记:《Java应用架构设计模块化模式与OSGi》源代码

    OSGi与Equinox 创建高度模块化的Java系统 第4章完整源码

    OSGi(Open Services Gateway Initiative)是一种Java平台的模块化系统,它允许开发人员将应用程序分解为独立、可重用的模块,称为服务。Equinox是IBM贡献给Eclipse基金会的一个OSGi实现,它是Eclipse IDE的基础,...

    OSGi java 模块化标准学习资料

    OSGi(Open Services Gateway Initiative)是Java平台上的一个模块化系统和动态服务框架,它为构建可升级、可管理、可复用的软件组件提供了一种标准方式。这个框架允许开发者将应用程序分解成一系列独立的模块,每个...

    OSGi入门篇:模块层(by 静默虚空)

    OSGi模块层是框架中最基础的部分,它实现了Java的模块化特性,但又与Java现有的模块化特性有所不同。 首先,文章介绍了模块化的概念。模块化是将大型系统分解为多个较小的逻辑单元,通过设定模块间的逻辑边界来改善...

    OSGI原理与最佳实践

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

Global site tag (gtag.js) - Google Analytics