IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 软件系统的扩展 -> 正文阅读

[Java知识库]软件系统的扩展

软件系统与硬件和建筑系统最大的差异在于软件是可扩展的,一个硬件生产出来后就不会再进行改变、一个建筑完工后也不会再改变其整体结构。相比之下,软件系统就完全相反,如果一个软件系统开发出来后,再也没有任何更新和调整,反而说明了这套软件系统没有发展、没有生命力。真正有生命力的软件系统,都是在不断迭代和发展的,典型的如 Windows 操作系统。

扩展的基本思想—拆

拆,就是将原本大一统的系统拆分成多个规模小的部分,扩展时只修改其中一部分即可,无须整个系统到处都改,通过这种方式来减少改动范围,降低改动风险。

合理的拆分,能够强制保证即使程序员出错,出错的范围也不会太广,影响也不会太大

常见的拆分思路有如下三种:

  • 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分;
  • 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分;
  • 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分;

从范围上来看,从大到小依次为:流程 > 服务 > 功能,以 TCP/IP 协议栈为例:

  • 流程
    对应 TCP/IP 四层模型,因为 TCP/IP 网络通信流程是:应用层 → 传输层 → 网络层 → 物理 + 数据链路层,不管最上层的应用层是什么,这个流程都不会变。
  • 服务
    对应应用层的 HTTP、FTP、SMTP 等服务,HTTP 提供 Web 服务,FTP 提供文件服务,SMTP 提供邮件服务,以此类推。
  • 功能
    每个服务都会提供相应的功能。例如,HTTP 服务提供 GET、POST 功能,FTP 提供上传下载功能,SMTP 提供邮件发送和收取功能。

以一个简单的学生信息管理系统为例,拆分方式是:

面向流程拆分

展示层 → 业务层 → 数据层 → 存储层

各层含义是:

  • 展示层:负责用户页面设计,不同业务有不同的页面。例如,登录页面、注册页面、信息管理页面、安全设置页面等;
  • 业务层:负责具体业务逻辑的处理。例如,登录、注册、信息管理、修改密码等业务;
  • 数据层:负责完成数据访问。例如,增删改查数据库中的数据、记录事件到日志文件等;
  • 存储层:负责数据的存储。例如,关系型数据库 MySQL、缓存系统 Memcache 等;

面向服务拆分

将系统拆分为注册、登录、信息管理、安全设置等服务

面向功能拆分

每个服务都可以拆分为更多细粒度的功能,例如:

  • 注册服务:提供多种方式进行注册,包括手机号注册、身份证注册、学生邮箱注册三个功能;
  • 登录服务:包括手机号登录、身份证登录、邮箱登录三个功能;
  • 信息管理服务:包括基本信息管理、课程信息管理、成绩信息管理等功能;
  • 安全设置服务:包括修改密码、安全手机、找回密码等功能;

通过学生信息管理系统的例子可以发现,不同的拆分方式,系统的架构图差异很大。但好像无论哪种方式,最终都是可以实现的。既然如此,我们为何要头疼去选择呢,随便挑选一个不可以吗?

当然不能随便挑,否则设计就没有意义了,原因在于:不同的拆分方式,本质上决定了系统的扩展方式

扩展方式

下面是不同拆分方式应对扩展时的优势:

  1. 面向流程拆分
    扩展时大部分情况只需要修改某一层,少部分情况可能修改关联的两层,不会出现所有层都同时要修改。例如学生信息管理系统,如果我们将存储层从 MySQL 扩展为同时支持 MySQL 和 Oracle,那么只需要扩展存储层和数据层即可,展示层和业务层无须变动。

  2. 面向服务拆分
    对某个服务扩展,或者要增加新的服务时,只需要扩展相关服务即可,无须修改所有的服务。

  3. 面向功能拆分
    对某个功能扩展,或者要增加新的功能时,只需要扩展相关功能即可,无须修改所有的服务。

不同的拆分方式,将得到不同的系统架构,典型的可扩展系统架构有:

  • 面向流程拆分:分层架构;
  • 面向服务拆分:SOA、微服务;
  • 面向功能拆分:微内核架构;

这几个系统架构并不是非此即彼的,而是可以在系统设计中进行组合使用的。

--------来源《极客课程》? 学习摘要

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:22:16  更:2022-01-17 11:24:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:49:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码