开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术:软件模块化】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/80/detail/15899
软件模块化
模块化是控制软件复杂性的一个最基本的技巧,也就是会把软件分成若干个模块,在分成若干个模块以后就可以让不同的人去开发不同的模块,或者在一个长时间的开发过程中间,可以在不同的时间去开发不同的模块,从而使得一个复杂的软件系统可以通过多人的协作或者通过一步一步的实现来完成整个系统的开发。
那软件的模块化的方法,除了所熟知的按照功能的原则来分软件的模块以外,其实还有一种更重要的按照层次结构的方式来划分软件的方法,这种方法是把软件分成若干个层次,那最简单的分法就是把软件分成两层,一层是用于实现界面的视图层,它是整个程序的外壳,它里头只包含了这个界面长什么样子以及界面上的数据是如何被输入和输出的,而另外一层则是负责整个系统的逻辑以及数据的存储的逻
辑层,那它是整个系统的核心。
在这两层里,界面层相对比较直接,所以说它一般会使用面向功能的方式去做设计,而逻辑层相对比较复杂,所以它会使用这个面向对象的方式来设计这个逻辑
层,那由于这两层设计的方法是完全不同的,所以说它所体现出来的样子是不一样的,在界面层体现出来的是功能,在逻辑层体现出来的是逻辑对象。
那这两层之间就存在着一个差异,所以需要在这个界面层或者视图层和活性层之间插入一个中间层,这个中间层把它称之为控制器层,把面向对象的设计转换成为面向功能所需要的这样的一个API,同样这个控制器层也负责把数据从视图层转换成为逻辑层所需要的一个数据。为了实现更小的模块化的划分,可以把其中复杂的模型层细分成为若干个更小的层次,比如负责业务逻辑的服务层、负责获取数据组装成对象的数据访问层以及负责数据对象模型向数据库的关系模型去转换的映射层以
及最后数据的载体实体层。
每一层都有自己的职责,那用城市分割以后就可以得到一个更细的模块划分,而且
每一个功能就是常说的每一个功能,其实从上到下贯穿了这所有的层次,从界面层跟界面有关的代码在界面层,然后跟逻辑有关的代码在这个服务层,跟数据存储有关的代码在数据访问层和映射层,那最后数据以及跟数据逻辑密切相关的代码在实体层,这样更细致的划分使得整个的系统结构会更加的简单,因为知道把模块化的更细,其实每一个部分的问题也就更加的简单,而且不同层会采用不同的技术来实现每一层都可以独立的测试。
代码的变更也可以更有效的控制在同层之内不会影响其他的层次。在系统被分为不同的层次以后可以用不同的技术去实现不同的层,比如说在前面所说的分层结构中间可以用 vivo 的框架或者微信的小程序去实现它的视图层,可以用 MVC 去实现它的控制器层,把它变成一个 restful 的 API,用 spring 容器的冰对象去实现它的服务层,去实现它的业务逻辑。
对于数据访问层和映射层,可以使用 Redis 和 MyBatis 的数据库去实现数据访问层和关系对象和对象模型转换的映射程,那最后的实体层不依赖于任何的框架技术
的,它是 JAVA object 的对象。
把这样的一个分层结构,除了能够把系统变成更成的模块,用不同的技术去实现以外,它也会影响把它部署在物理服务器上面的状况,不同的层次是可以部署在不同的物理服务器上的,比如一般的做法来说都会把视图层单独部署在一台外部服务器上,在这台服务器上面只存储了静态的网页和静态的图片,到它的后面的层次,它的模型层则会部署在这个应用服务器上,而数据则会存储在数据库服务器上,这样
通过把不同的部分部署在不同的服务器上会提高系统服务器的整体性能。