对模块开发卷宗的理解_java模块化的思考系列——模块的定义

模块化似乎是一个老生常谈的问题,在这里先聊聊一些背景,设计模式曾经风靡一时,但貌似模式变得很司空见惯,开发人员会经常不假思索的使用各种模式。

确实模式帮助一代开发人员接受和认识到了一种新的编程范式,我们经常谈到的面向对象设计原则也都体现在了设计模式中,这些新形成的共识指导了面向对象开发,但问题是创建大型软件系统依然是困难的,它们依然难以维护’、扩展和管理,也就是说现有的面向对象开发模式不能很好的管理系统复杂性,他们解决的是软件开发中的逻辑设计问题,但在软件的物理设计方面还有很大挑战,这里就引出了什么是物理设计、逻辑设计又是何物?

  1. 逻辑设计:逻辑设计是关于语言结构的,如类、操作符、方法和包。识别类的方法、类之间的关系以及包的结构问题是逻辑设计问题。例如,觉得一个类是否需要继承?是否单例?一个操作是否为抽象这都是逻辑设计问题,可想而知,大多数开发人员都是在操作这些对象,就会不断处理逻辑设计问题,逻辑设计只是软件设计挑战的一方面,另一方面就是物理设计。
  1. 物理设计:物理设计表现为物理实体的操作,比如如何打包部署,如何决定这个类属于哪一个部署单元,可部署单元实体之间的关系都是物理设计的问题。遗憾的是大多数团队付出很大一部分时间在逻辑设计上,但在物理设计上却很少下功夫,物理设计说白了就是如何将系统拆分为模块,以及管理模块之间关系的方法,缺乏物理设计的逻辑设计通常也不会达到预期的效果。

那么具体在java中我们如何理解模块呢?简单说就是“一个软件块” (貌似等于没说),但这个定义不好区分于类,包,组件和服务,关于模块它应该具备以下特征:可部署,可管理,可重用,可组合,无状态的软件单元,来个图先

40b0b3b629307c430617ab5983c76e91.png

定义模块

  1. 可部署:没错,不同其他软件单元,它是一个部署单元,模块所表达的意义更多是粗粒度物理层面的实体,可能你想到了很多例子如EAR,WAR,JAR。
  2. 可管理:可管理的意思就是说在运行时可进行安装、卸载和更新,包括版本的管理。将系统拆分为模块有助于开发人员隔离开发自主模块并按照模块边界规划开发工作(如EAR,WAR,JAR)。
  3. 可重用:这里说的模块其实是进程内重用单元,尽管SOA(面向服务的架构 Service-Oriented-Architecture)也是来设计软件模块的,但这里所述的模块与应用或服务不同,它不属于分布式技术,也就是说模块暴露的操作是通过直接调用方法触发的。
  4. 可组合:模块是可以组合的,大模块可以由小模块组成,粗粒度模块是由细粒度的模块组合的。
  5. 无状态:模块本身是无状态的,尽管我们在使用模块时需要实例化其中的类,这些类会保持某种状态,就模块本身而言是无状态的(如EAR,WAR,JAR)。
  6. 综上述:java中最适合做模块的单元是?没错就是jar。

下一篇我将讲解下【模块化实践包含哪些方面】,敬请期待!个人理解有所纰漏,还请老铁们多多指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值