面向对象分析方法&数据库设计方法的实践

19 阅读8分钟

本文转载自-方才coding的博客,原文链接:fangcaicoding.cn/course/18/9…

Hello 我是方才,后端研发leader、4年团队管理&架构经验。 文末,方才送你一份25年最新的架构师备考资料,记得领取哟!

刷题模块设计

大家好,我是方才!上个周末,方才用了1.5天时间为博客新增了一个“刷题模块”。

今天方才简单做个分享:

  1. 一是为了补充完善开源博客的配套文档,记录相关功能,方才的设计思路,便于大家理解;
  2. 同时也给今年备考软考架构师的伙伴,分享下面向对象分析方法数据库设计方法论在实际项目中的运用,加深大家对相关知识点的理解和掌握。

刷题模块功能本身是比较简单的,但分析和设计的思路,是可以复用到企业级项目的设计过程,我相信对大家还是会有所帮助的。

需求分析阶段

首先,关于该需求,方才做了个简单的思考:

  1. 刷题模块会支持两种题型:一种是问答类的,比如说软考的案例分析和论文,日常求职的面试题也是该类型;一种是选择题类的,比如软考的综合知识部分;

  2. 考虑通用性,目前I先实现问答类题库;

  3. 问题内容、参考答案和深度解析的渲染,均基于markdown语法,保持整体技术栈的一致性;

  4. 深度解析模块,通过超链接到专栏模块,融合到知识体系中;

然后使用到了面向对象的分析方法,以用例为驱动,绘制用例视图如下:

image-20250311161723089

ps:这个用例视图是参考UML规范绘制的,在实际的开发中,一般没必要花这个时间(方才当时就直接用xmind进行梳理的)。

image-20250311162203766

关于面向对象

前置概念理解:

  • 面向对象的分析方法(Object-Oriented Analysis, OOA)与UML(统一建模语言)之间是理论与工具的互补关系。

  • 面向对象的分析是为了确定问题域,理解问题,并识别问题域中的对象及其关系。

  • 而UML是通过类图、对象图等静态模型或动态模型,将抽象的类、属性、方法、关联关系、通信关系等以图形化形式呈现设计。

其中UML 的4+1 视图,是可以很好的描述最终设计的结果:

  1. 逻辑视图:逻辑视图也称为设计视图,它表示了设计模型中在架构方面具有重要意义的部分,即类、子系统、包和用例实现的子集。
  2. 进程视图:进程视图是可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实例,描述了并发与同步结构。
  3. 实现视图:实现视图对组成基于系统的物理代码的文件和构件进行建模。
  4. 部署视图:部署视图把构件部署到一组物理节点上,表示软件到硬件的映射和分布结构。
  5. 用例视图:用例视图是最基本的需求分析模型

image-20250311170124193

在刷题模块的设计中,就用到了【用例视图】,因为整体比较简单,其他视图就没必要了。

用例图详解

关于用例视图,我们也简单了解下:用例图是静态图,展现的是一组用例、参与者以及它们之间的关系。

  • 四个要素分别是系统、参与者、用例、关系;

  • 用例图中的参与者是人、硬件或其他系统均可以扮演的角色;

  • 用例是参与者完成的一系列操作;

  • 用例图中关系主要有四种,分别是关联、包含、扩展、泛化。

关于要素和关系的图例,方才简单解释下:

  • 系统:用一个矩形块表示;
  • 参与者:用火材人表示;
  • 用例:用一个椭圆表示;
  • 关联:是参与者和用例之间的一种关系,一般用实线 + 实心箭头表示;
  • 包含:用例之间的一种关系,其中一个用例(称为基本用例)的行为包含了另一个用例(称为包含用例)的行为,用虚线箭头 + <>表示,箭头指向包含用例;
  • 扩展:用例之间的一种关系,其中一个用例(称为扩展用例)的行为增强了另一个用例(称为基本用例)的行为,用虚线箭头 + <>表示,箭头指向基本用例。
  • 泛化关系也可以称作继承关系(类比类图中的泛化),用一个实线 + 空心箭头来表示,可以表示执行者间的关系也可以表示用例之间的关系。

把刚才的用例视图,标记上各个要素,如下图,我相信大家都能理解了:

image-20250311171653726

数据库设计

有了需求和用例,接下来就进入了研发设计阶段,今天方才就先分享下关于数据库的设计。

设计步骤

直接参考下软考架构师的官方书籍,步骤如下。

ps:刷题模块作为一个很小很小的需求,所以概念设计+逻辑结构设计就一起做了,物理结构设计直接省略掉,就是个单机版mysql足以。

image-20250311110918898

(1) 需求分析:即分析数据存储的要求,产出物有数据流图、数据字典、需求说明书。获得用户对系统的三个要求:信息要求、处理要求、系统要求。

(2) 概念结构设计:就是设计 E-R 图,也即实体 - 联系图。工作步骤包括:选择局部应用、逐一设计分 E-R 图、E-R 图合并。

  • 分 E-R 图进行合并时,它们之间存在的冲突主要有以下 3 类。
    • 属性冲突:同一属性可能会存在于不同的分 E-R 图中。
    • 命名冲突:相同意义的属性,在不同的分 E-R 图上有着不同的命名,或是名称相同的属性在不同的分 E-R 图中有着不同的意义。
    • 结构冲突:同一实体在不同的分 E-R 图中有不同的属性,同一对象在某一分 E-R 图中被抽象为实体而在另一分 E-R 图中又被抽象为属性。

(3) 逻辑结构设计:将 E-R 图,转换成关系模式。工作步骤包括:确定数据模型、将 E-R 图转换成为指定的数据模型、确定完整性约束和确定用户视图。

(4) 物理设计:步骤包括确定数据分布、存储结构和访问方式。

(5) 数据库实施阶段:根据逻辑设计和物理设计阶段的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

(6) 数据库运行和维护阶段:数据库应用系统经过试运行即可投入运行,但该阶段需要不断地对系统进行评价、调整与修改。

先 E-R图

简单解释下概念:

  • E-R图提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型;

  • 在 E-R 模型中,使用椭圆表示属性(一般没有)、长方形表示实体、菱形表示联系,联系的两端要填写联系类型(1:1,1: n 或 m:n)。

回到刷题模块的设计,基于用例分析部分,设计如下:

image-20250311173406878

再逻辑结构设计

这部分在实战中,可参考阅读:表结构设计实战版

同时方才更习惯把用例场景转化为对象的行为(面向对象设计+数据库设计的综合使用了)。

到此,后端的设计基本上就完成了,表结构、API功能等都有了。

image-20250311173916745

前端设计

整个博客系统采用的是前后端分离的架构。

ps:关于前后端分离架构,指的并不是前后端由不同的岗位人员开发就是前后端分离的架构了。本质是边界的划分:

  • 前端:负责页面渲染、用户体验优化、交互逻辑(如表单验证、动画效果)。
  • 后端:负责数据存储(数据库设计)、业务逻辑处理(如订单计算)、安全防护(如JWT认证)

交互逻辑,通过前面的用例视图,已经能大概理解。

那剩下的就是UI布局了,关于UI,方才思考如下:整体UI风格和布局和当前保持一致,尽量复用现有的布局基础组件。

题目列表区

image-20250308103150696

试卷类的刷题区

image-20250308111818090

最终效果呈现

ps:目前已经录入了软考架构师历年的案例和论文真题,以及案例的参考答案。

今年计划备考的小伙伴都可以用一用,后续方才也会补充更多有价值的深度解析资料,助力备考,体验地址:fangcaicoding.cn/papers。

image-20250310210309139

image-20250310210344962


备考资料

相遇即是缘分,方才送你一份优质的架构师备考资料(都是方才自己用过的,真的能帮大家通过软考的资料)

也可备注加群,方才拉你进入免费的软考架构师交流群(日常分享高质量的备考资料、实时资讯共享等)

技术资料