当前位置: 首页 > backend >正文

2025系统架构师---论面向对象的软件设计

摘要

自“软件危机”出现过后,工程化软件开发方法不断发展,采用什么方法对大

规模软件进行设计并保证软件的质量。在这样背景下,人们开始从面向数据流过

程开发法中不断思考,进而引入对象的概念。对象是数据与行为的封装,对象既

是自然界中的对象,这种方法不仅易理解也符合事物本身结构,对象之间通过消

息进行交互。面向对象的分析与设计不断发展,UML 成了面向对象分析与设计

的形式化表示方法。本人在 2016 年,采用面向对象的方法,对 XX 航空公司的

航路费及机场费核算[RAFS]系统进行了分析与设计,并取得了成功,通过本项目让

我认识到面向对象软件分析与设计的应用场景,面向对象分析与设计的过程,方

法。并且加深了对面向对像理念的理解,如用例在需求阶段的重要作用,领域概

念模型构建的方法,类识别方法等。

正文

1、面向对象分析

面向对象分析方法的核心是用例和用例图。用例是用户与系统

交互的功能集合的说明,这里用户是一种角色,可以是其他系统,也

可以是第三方系统接口。用例核心是一种功能分解方法,主要用于捕

获软件需求。用例的核心是用例描述,用例描述中的主要内容有,用

例名,用例编号,用例角色,主流程,异常流程,错误处理,用途描

述及特征,前置条件,后置条件等。

1.1 确定用例

通过对使用 RAFS 系统用户及交互系统的调研与分析,RAFS 系统

包括以下用例:用户认证与授权,机场费航路费起降规则编辑,机场

费航路费计算,报表与查询等模块。其中核心用例为机场费航路费规

则编辑,机场费航路费计算。费用规则编辑的复杂性存在于,每个国

家的机场费航路费的收费规则相差很大。首先计费规则复杂。比如,

有的机场跟据不同时间段,飞机的不同起飞重量进行计费;也有根据

不同的时间段以不同费率收取噪音费;也有是固定费率进行计算;航

路费指航线所经过的国家领空,这个国家收取的费用。费用规则一般

是按里程固定费率计算。其次,一个费用有多个计费规则,有“并”

关系也有“或”关系。因此决定规则编辑界面规则的设计变得困难。

1.2 复杂用例的流程描述

活动图主要用于描述对象的操作流程与事件处理,状态图用于描

述对象的状态。活动图与状态图可以用于描述用例的动态形为及用例

中核心对象的状态转换。在 RAFS 系统中,通过对各国机场费,航路

费收费规则文档的分析,发现规则可以分为条件和结果。条件则相对

固定几类:1,算术运算条件;2,固定费用选择类;3,单项条件类,

4 多选条件类。这正符合界面组件的面向对象设计。条件组件是一个

界面组件,有自己的生命周期,因此对条件对象绘制了状态图,确定

条件对象有初始状态,展现状态,编辑状态,结速状态。条件对象有

始化,装入数据,渲染,数据更新,重绘界面,提交数据,销毁等过

程。针对条件中的飞行数据则来自于第三方系统,为了便于在规则界

面组装成条件,架构组对这些数据进行了分析,将核心字段提取出来

形成数据因子,用于构成条件规则。

费用计算用例主要是根据配置的规则,结合实际的飞机飞行数据,

算出费用。难点在于根据规则中配置的因子,找到因子对应的实际飞

行数据,将数据应用于规则,算出实际费用。

1.3 构建用例图

根据识别到的用例,架构组构建了用例图,用例进一步细化出了

如下用例。费用编辑用例细化出了,配置因子,配置费用规则。费用

计算用例又细分出,航路费计算,起降费计算。用户认证授权细分出,

用户身分识别,用户权限管理用例。进过与客户多次沟通,最终确定

了用例图,用例描述,核心用例的流程,核心对象的状态,及主要业

务对象之间的业务操作流程。

1.4 构建领域模型

识别出用例后,根据用例,架构组将用例中的使用到的名词,全

部写到卡片上,然后将卡片和用例发给架构组成员,让成员确定最重

要的名词,和不需要名词。最后进行架构组会议,确定了高层的领域

对象。确定高层次的领域对象后,架构组对每个对象进行属性提取。

这一步操作过后,是确定领域对象之间的关系。RAFS 系统初步识别

出如下对象:因子,条件,表达式,规则,结果,费用,飞机型号,

国家,城市,飞机制造商等对象。

1.5 顶层架构图

通过对用例,领域对象的分类,形成 UML 包图,构建出粗粒度的

架构图,确定各模块之间的关系。为接下来的工作打好基础。根据客

户的非功能性需求,此系统必须用浏览器进行访问。因此架构组认为

除费用计算用例以外的用例整合为一个基于 B/S 架构风格的系统,采

用 MVC 为核心处理模式。MVC,主要是将展现与控制进行有效分工,

模型保存业务数据。模型的变化会通知视图更改界面,视图通过控制

器处理业务或者调用后端业务层接口,根据业务需要选择不同的视图,

将视图展现给用户。

经过以上的分析与处理,最终确定了系统的功有需求列表,确定

了需求范围。形成了需求定义说明书,其中包含了所有用例,用例图。

每个用例使用单独的用例说明文档。

2,面向对象设计

通过 OOA 过程后,系统进入设计阶段。设计阶段主要包括以下过

程。实现用例方案;设计技术支撑方案;设计用户界;精化设计。本

节只对各个过程中的核心子过程进行描述。

2.1 类识别

根据需求分析文档、用例定义文档及初步的领域模型,提取边界

面,控制类,实体类,辅助类。这一过程,RAFS 系统识别出以下界

面组件,规则编辑界面类,规则编辑界面类,规则条件界面类(包含

算术条件类,单选条件类,复选条件类,固定费用条件类),用户登

录界面类,计算进度显示等界面类。控制类:界面组件控制基类;4

个条件控制类 等其他控制类。实体类主要是精化领域模型中抽象出

的模型类。另外还抽取出规则业务处理辅助类,因子业务处理辅助类,

数据访问等相关类。同时还对相类的关系进行的标识,如规则类是条

件类的聚合,条件组件抽象类是 4 个条件类的泛化等等。

2.2 构造交互图

根据用例中的流程说明(主要流程,辅助流程,异常流程)对系

统中的对象间的调用时序关系进行了视图化。也同时应用活动图描述

了一些对象之间的业务流程。并确定了对相控制类,辅助类中的相关

方法。

2.3 技术选型

通过以上几个阶段,架构组对.net 平台,java 平台进行了评估。

就以下几个方面进行讨论与权衡:

1. 平台成熟度,及大型项目中的成功案例

2. 平台的基础服务的成熟度

3. 开发人员招聘的难易成度

4. 与企业现有系统的技术的互操作程度

最终选择 Java 平台作为项目开发的基础平台。在前端规则界面

数据的存储与传输中采用 XML 格式。界面组件采用 ZK8.0。在 JDK1.7,

版本的基础上使用 Spring MVC 为表现层,Spring 作为轻量级的业务

层集成框架,使用 hibernate, O/R mapping 的方式进行数据访问。

费用计算采用成熟的规则引擎 Drools,采用模板引擎将将规则文件

(XML)转成 Drools 的规则文件。因子数据的存储采用星型结构提高

因子数据的访问效率。为了便于后期的扩展,本系统中所有功能以接

口的方式进行定义,真正做到对修改关闭。同时在模块设计中制定了

上层仅依赖下层原则保证模块的独立性。

3,架构文档化

经过需分析与设计最终确定的开发中使用的技术,明白了目标系

统概念模型,功能模型。形成了以类图,用例图,活动图,交互图,

状态图,构件图,部署图为中心的UML架构文档。并结合4+1 视

图对整体架构进行了描述。最终形成了架构设计说明书,架构质量规

格说明书,并交付客户。

结论

通过本项目,本人进一步理解了面向对象的需求分过和设计过程,

对 UML 的静态模型图,动态模型图的运用有了新的体会。通过本项目

我认为面向对象的分析与设计,核心是抓信用例图,然后针对用例的

描述对静态模型,动态模型进行细化。最终根据设计模型的特点选择

实现技术。并且这个过程不是一次性的而是迭代多次,不断精确的过

程。最终根据选择的技术特点及系统设计,业务要求采用合适的开发

方式。

http://www.xdnf.cn/news/4046.html

相关文章:

  • Python字符串全面指南:从基础到高级操作
  • 计算机视觉与深度学习 | 点云配准算法综述(1992-2025)
  • Python核心技巧 类与实例:面向对象编程的基石
  • 协程补充---viewModelScope 相关知识点
  • 【计算机视觉】3d人脸重建:3DDFA_V2:实时高精度3D人脸重建与密集对齐技术指南
  • 【NLP】 26. 语言模型原理与概率建模方法详解(Language Models)
  • QT聊天项目DAY08
  • C 语言逻辑运算符:组合判断,构建更复杂的条件
  • Cisco Packet Tracer 选项卡的使用
  • Python中的客户端和服务端交互的基本内容
  • vue实现AI问答Markdown打字机效果
  • 【C/C++】函数模板
  • Auto.js 脚本:清理手机数据但保留账号
  • 第R8周:RNN实现阿尔兹海默病诊断(pytorch)
  • 基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的网络安全防火墙技术方案‌(国产化替代J1900的全栈技术解析)
  • Python生活手册-正则表达式:从快递单到咖啡订单的文本魔法
  • Level DB --- MergingIterator
  • Compose 中使用 WebView
  • 基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计
  • Softmax回归与单层感知机对比
  • 【platform push 提示 Invalid source ref: HEAD】
  • 双目视觉的核心目标
  • NGINX 的 ngx_http_auth_jwt_module模块
  • 模块方法模式(Module Method Pattern)
  • JavaScript 实现输入框的撤销功能
  • 算力经济模型推演:从中心化到去中心化算力市场的转变(区块链+智能合约的算力交易原型设计)
  • Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)
  • C++ 类与对象(下)—— 进阶特性与底层机制解析(构造函数初始化,类型转换,static成员,友元,内部类,匿名对象)
  • 基于 HTML 和 CSS 实现的 3D 翻转卡片效果
  • WebRTC 服务器之SRS服务器概述和环境搭建