`
wenjun00
  • 浏览: 8164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java应用架构设计模块化模式与OSGI读书笔记

 
阅读更多


 《Java
应用框架设计模块化模式与OSGI》这边书前几章都是讲设计模式好处啊,为什么使用模式什么的,然后第7章就实战了重构了,中间还老是跳跃性的说第11章,第9章说明了为什么这么用,看得前几章十分不爽啊。

因此直接从第8章看起:

1.       模块化的设计模式5种模式分别为:

1)  基本模式

主要定义了其它模式的赖以存在的基础元素。基本模式关注将模块作为可重用单元,依赖管理以及内聚,设计出良好的软件系统要遵循基本模式。包含:

管理关系:设计模块关系。

模块重用:强调模块级别的重用。

模块内聚:模块的行为应该只服务于一个目的。

2) 依赖模式

   非循环关系:模块关系必须是非循环的。

等级化模块:模块关系应该是等级化的。

物理分层:模块关系不应该违反概念上的分层。

容器独立:模块应该独立于运行时容器。

独立部署:模块应该是独立的可部署单元。

3) 可用性模式

         发布接口:使模块的发布接口众所周知。

         外部配置:模块应该可以在外部进行配置。

         默认门面:为具有底层实现的细粒度模块创建一个门面,使其成为细粒度模块的一个粗粒度入口。

4) 扩展性模式

         抽象化模块:依赖模块的抽象元素。

         实现工厂:使用工厂创建模块的实现。

         分离抽象:将抽象与实现他们的类放在各自独立的模块中。

5) 通用模式

         就近异常:异常应该接近抛出他们的类或接口。

         等级化构建:按照模块的等级执行构建。

         测试模块:每个模块应该有一个应对的测试模块。

---------------------------------------------

 

基本模式:

管理关系:设计模块关系

模块和模块之间的关系:

         如果修改模块M2的内容,会影响另一个模块M1,那么就可以说M1物理依赖于M2.

关系分为两种:

输入依赖,输出依赖或者二者兼备。

如果有其他模块依赖当前模块中的类,那么就说存在输入依赖。

如果模块依赖其他模块中一个或多个类,那么就说存在输出依赖。
 直接依赖图示:

 

 

 

 

 

 

Client为输出依赖,service为输入依赖

 

间接依赖图示:

也叫传递性依赖,间接依赖至少要涉及三个模块,service模块即作为输出依赖也作为输入依赖,service模块作为clientsubsystem模块之间的桥梁,client模块和subsystem模块就有间接依赖关系。若subsystem模块有什么变化可能会影响serviceclientmok

具备过多的输入和输出依赖模块是最难管理的,因为他们被大量其他模块使用,同时本身也使用了大量的模块。同时具备输入和输出依赖的模块需要最大程度上的灵活性,应该通过依赖模式管理这种灵活性。要不惜一切代价避免循环依赖关系。要灵活运用抽象化模块模式和分离抽象模式来管理模块依赖。                                                                                                                                                                                 

模块之间的紧耦合是不好,可以通过关系进行反转或者完全消除,来把紧耦合的关系拆开。

书中样例:

Customer类实现了DiscountCalculator接口,并且和bill类有依赖关系

Bill类依赖了DiscountCalculator接口。

因此customer.jar模块依赖billing.jar, customer.jar在构建和运行时都需要billing.jar

要想单独使用customer.jar时而不需要billing.jar那就需要反转关系来实现了。

1.       反转关系

Bill重构为一个接口。接下来,为了避免分割包,将Bill接口转移到与Customer类相同的模块中。



 

 

1.       消除关系

反转关系允许独立于billing.jar模块部署customer.jar模块。在反转关系之前,能够独立的测试部署billing.jar模块。在反转关系之后,我们能够独立测试和部署customer.jar模块。但是,如果想独立测试和部署这两个模块,那该怎么办呢?为了做到这一点,我们需要完全消除他们之间的关系。

只需要把BillDiscountCalculator这两个接口打包到独立的模块中。不需要其他的代码变化。

 

识别模块是设计模块化软件系统的第一步。紧随其后的就是管理这些模块间的关系。模块之间的这些关系称为结合点,系统中的这些地方需要最特别的关注以确保灵活的系统设计。如果没有关注模块间的关系,只是将系统拆分为一系列的模块并不会带来很明显的好处。

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 9.3 KB
  • 大小: 12.4 KB
  • 大小: 8.4 KB
  • 大小: 18.7 KB
  • 大小: 12.4 KB
分享到:
评论

相关推荐

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

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

    osgi学习笔记(一)

    总结来说,OSGi提供了一个强大的模块化系统,通过服务导向的架构,使Java应用更加灵活和可维护。开发者通过掌握OSGi,能够构建更高效、可扩展的系统,同时也能更好地应对复杂的应用场景和持续变化的需求。如果你计划...

    osgi学习笔记(二)

    总的来说,OSGi是一个强大的模块化框架,能帮助开发者构建更灵活、可维护的Java应用程序。通过理解其核心概念、熟练使用相关工具,并在实践中不断探索,我们可以充分利用OSGi的优势来提升软件项目的质量和效率。

    OSGI学习笔记.doc

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle包含自己的类加载器和资源。这些bundle可以通过动态安装、启动、停止、更新和卸载...

    osgi学习笔记(三)

    OSGi是一个Java平台上的动态模块化系统,它允许开发者创建可热部署、互相依赖的模块,从而实现更加灵活、可维护的软件架构。 ## OSGi简介 OSGi的核心概念是模块,每个模块称为一个Bundle。这些Bundle之间可以通过...

    OSGi原理与最佳实践 学习笔记 一

    通过OSGi框架,开发者能够创建具有高度模块化和动态化的Java系统,这些系统可以灵活地进行服务的注册、发现和升级。 OSGi Alliance成员共同开发并免费提供规范,但兼容性程序只对成员开放。目前OSGi Alliance有12个...

    SpringDM笔记28-Spring And OSGi:Layers of Integration

    OSGi是一种模块化系统,它允许Java应用程序以模块化的方式进行构建、部署和管理,而Spring框架则是一个广泛使用的Java企业级应用开发框架。这篇笔记可能探讨了如何将Spring的功能与OSGi的模块化优势相结合,以实现更...

    阿里P8 架构师整理Java学习笔记.pdf

    - **OSGI**: Open Service Gateway Initiative,提供了一种标准化的服务平台,支持模块化的应用程序部署和运行环境。它允许动态地安装、卸载和更新模块。 #### 四、Java集合框架 **4.1 接口继承关系和实现** - **...

    很久之前的osgi整理

    OSGi(Open Services Gateway Initiative)是一个开放的标准,用于创建模块化和动态的Java应用程序。它允许开发者将应用程序拆分成小的、独立的模块,这些模块称为服务或bundle,每个都有自己的类路径,并且可以在...

    Felix笔记1-构建BookshelfProject

    Apache Felix是一个流行的开源实现,遵循Java企业版(Java EE)中的服务组件运行时(OSGi)规范,用于创建模块化应用。在这个项目中,开发者可能在学习如何将应用分解为可独立更新和管理的模块。 描述中提到的链接...

    Eclipse 插件开发学习笔记.rar

    Eclipse基于OSGi(Open Service Gateway Initiative)框架,采用模块化设计,使得每个功能都以插件的形式存在。这些插件之间通过API进行交互,形成了一个庞大的生态系统。Eclipse的插件由三部分组成:插件项目...

    TPF-dist ZIP

    OSGi是一种Java平台上的服务导向架构,它允许应用程序以模块化的方式进行构建、部署和管理,使得组件能够独立升级、替换或动态发现彼此。 OSGi的核心概念包括: 1. **模块系统**:每个模块称为一个Bundle,封装了类...

    Eclipse插件开发学习笔记.pdf

    为了更好地学习Eclipse插件开发,可以加入相关的Java学习群组,例如文档中提到的“Java学习群:***”,在其中可以与首席架构师以及其他学习者交流心得、共享资源,甚至能够免费接受首席架构师的讲课,这些都是非常...

    JBOSS7学习笔记

    1. **模块化架构**:JBoss7引入了全新的模块化设计理念,每个组件被划分为独立的模块,这使得应用程序的部署更加灵活,同时减少了类加载冲突的可能性。这种设计提高了服务器启动速度和内存效率。 2. **基于AS7的...

    eclipse插件开发学习笔记

    - OSGi(Open Service Gateway Initiative)是Eclipse的基础,它定义了一种模块化系统,使得插件可以独立更新和加载。 2. **插件开发环境搭建**: - 首先,你需要下载Eclipse IDE for Java Developers或Eclipse ...

    Fuse ESB 4.3.1使用笔记

    ### Fuse ESB 4.3.1 使用笔记 #### 一、概述 Fuse ESB (Enterprise Service Bus) 4.3.1 是一个强大的企业级服务总线平台,基于Apache Karaf容器构建,用于集成不同的应用程序和服务。它支持多种集成模式和技术栈,...

    Eclipse插件开发笔记源码

    Eclipse采用插件化架构,每个功能模块都是一个插件,这些插件通过OSGi(开放服务网关协议)框架进行交互。开发者可以通过编写插件,扩展Eclipse的功能,如代码编辑器、调试器、构建工具等。 2. **Plugin.xml文件**...

    Eclipse RCP开发指南

    Eclipse采用模块化设计,其架构可以分为以下几个层次: 1. **平台运行时(OSGi)** - 包含OSGi框架和插件运行时。 - 负责管理插件的生命周期、类加载器及服务注册等。 2. **SWT** - Swing Widget Toolkit的简称...

    eclipse插件开发学习笔记1-14章

    Eclipse基于OSGi框架,每个插件都是一个独立的模块,通过声明依赖关系与其他插件协同工作。在开始开发之前,你需要安装Eclipse IDE并配置相应的插件开发环境,这通常包括安装Plugin Development Environment (PDE)...

Global site tag (gtag.js) - Google Analytics