最近真的很忙,前段日子赶项目星期六日也是到晚上1点。

平时早一些11点多回到宿舍,筋疲力尽。

太多太多太多的书想看,昨天偷懒了半天看了一小部分 《Java 应用架构设计 模块化与OSGI》

从今天开始在这里完成这本书的读书笔记。

首先介绍一下这本书及其作者:

《Java Application Architecture》 作者 Kirk Knoernschild 资深Java架构师。


在过去的很长一段时间里,出现了相当多的关于面向对象方面的原则,如Bob 大叔的SOLID设计原则,GOF 的设计模式。这些都关注在解决逻辑设计相关的层面上,但对于物理设计的关注则较少。

对于软件设计与架构主要面临两个方面的挑战,一为逻辑设计二为物理设计

以下阐述几个概念:

1、物理设计与逻辑设计

逻辑设计 关注在语言结构,如类、操作符、方法与包。识别类之间的关系以及系统中包得结构都为逻辑设计问题。比如决定一个类是否为单例是逻辑问题,确定一个操作是否为抽象的也是。

物理设计 表现为软件系统中得物理实体。确定如何将软件系统打包到部署单元中是物理设计问题。决定哪一个类属于哪一个部署单元也为物理设计。管理可部署实体之间的关系也为物理设计问题。

一个具体的例子是:

定义接口可以让定义与实现分离从而达到解耦的目的,这是一个逻辑设计问题。而当接口与它的实现类放到软件实体中就是物理设计问题了。

2、OSGI 服务平台

OSGI(Open Service Gateway Initiative) Service Platform 是由Sun、IBM、爱立信等公司成立的一个组织确立的一个基于Java 语言的业务规范。该规范的核心部分是一个框架,定义了应用程序的生命周期以及服务注册。基于其上构建了大量的应用服务,如日志、HTTP(运行Servlet)、用户管理、IO连接。

《Java Application Architecture》主要围绕三个部分讲解应用架构:

一、模块化的理由(为什么要模块化)1~7

二、模式(如何模块化)8~12

三、模块化架构模式与OSGI(案例剖析)13~17


第1章 模块定义

在Java平台中,什么是模块?

"软件模块是可部署的、可管理的、原生可重用的、可组合的,无状态的软件单元。它为用户提供了简洁的接口。"

在Java平台中,最适合的模块化单元就是JAR文件。

可部署:模块是一个可部署单元,而不像其他软件实体,如包或类,模块是一个独立的部署单元。从这个意义上讲,模块更多属于物理单元上的独立。

可管理:模块是一个可管理的单元,实际研发过程中,系统拆分为模块有助于简化其他复杂活动。这包括提高构建的效率、允许开发人员独立的开发自主模块并按照模块的边界划分开发工作。

可测试:模块是一个可以独立测试的单元。

原生可重用:模块是进程内可复用的单元。与SOA设计的应用或者服务不同,模块化组织部署单元的方式使他们可以进行跨应用重用。与服务不同,服务只需要一次部署就可以在不同进程内进行复用。而模块在被进程复用的时候只能部署在应用进程内进行复用。

可组合:模块是可组合的单元,同时模块是可以由其他模块组合而成。如粒度较粗的模块可以由几个粒度较细的模块组合而成。

无状态:模块是无状态的。特定版本的模块只会存在一个实例。不会实例化软件模块,但会实例化模块内部的类。

在从代码-》类-》包-》模块-》应用/服务 的过程中。模块往往成为一个空白区。模块化的设计往往是沟通开发人员与具体实现的,面向服务的开发需要具体的逻辑实现,更需要物理方面的设计。

物理设计往往会对逻辑设计产生影响,同时在物理设计中,逻辑设计的原则也可以起到指导性作用,如SOLID原则。

一方面物理设计的时候考虑如何设计才能让模块之间的依赖尽可能的少,模块复用性尽可能的提高。另一方面在好的物理设计在保证尽可能低的依赖性的情况下能对逻辑设计起到引导性的作用。开发人员必须在理解物理设计的情况下才能设计出对应的,与物理设计相匹配的逻辑设计。


To be continued.




更多相关文章

  1. RxJava学习模块之Schduler
  2. [置顶] Java中的类装载和初始化模块

随机推荐

  1. Java 网络 IO 模型
  2. 解决Eclipse建立Maven项目后无法建立src/
  3. JAVA WEB 实现第三方登录 -- qq篇
  4. 在docker上编译openjdk8
  5. 教您使用java爬虫gecco抓取JD全部商品信
  6. C#/Java 调用WSDL接口及方法
  7. 数据结构:关于重建二叉树的三种思路
  8. 记录一次LinkError排错:
  9. 201521123112《Java程序设计》第5周学习
  10. 定位JVM中占CPU较高的堆栈