我的系统设计方法论

news2025/1/18 3:43:04

        上一篇文章简述了我的日常需求分析方法,需求分析完成之后就进入系统设计阶段,真正的工时估算和开发测试计划,都是在做了一定的系统设计之后才能做好的。

        不想做工时估算和做到哪里是哪里,是一个态度问题。工时估算困难,估算不准确,从而导致每次开发测试发布计划形同虚设,是一个技术活问题。

        系统设计做得太详细,就太费时,在今天高举敏捷开发的时代,开发人员都是不做具体系统设计就开工的,所谓快速迭代和快速试错。但是,实际上我们看到的是,遍地都是越来越难以掌控和理解的系统平台,特别在加入几个没经验的新手之后,原则性错误都能频频出现,事实说明全盘抛弃系统设计而直接做到哪里是哪里,是不可取的,返工修复Bug和返工修改流程,是最浪费时间的,总体上耗费时间加起来哪里是敏捷开发,这不是我想要的。

        这么多年来,只要参与开发,我从没丢掉用UML来做需求分析和系统设计,即使主管不要求,我也要自己快速用UML设计一个来理清楚自己的思路,然后去写代码,同时,在写代码过程中,不断伴随修改UML设计图,尽量保持设计和实现同步。

        UML2.0共有13种图,不是每次系统设计都要全部用上的,根据80/20原则我们使用一部分图来设计系统就足够了,能让我们把需求分解成一个个具体任务,非常容易做具体任务的工时估算就可以了,一般也足够支持我们做具体的编码实现了。

1. 系统设计的工具与方法

        

        在系统设计过程中,一般用到哪些工具和土办法呢,如上图:

  1. DDD:  领域驱动设计,虽然它的一些命名和方法让人难受,但是它高度关注业务领域的思想是很优秀的,从业务功能去思考系统设计,而不是从技术实现角度去思考系统设计,是我最看重和最常用的,至于其它并不重要。
  2. UML:  统一建模语言,那是必须用的,我不喜欢用什么脑图、PPT画图、或者其它什么新式软件工具,UML几张设计图足够从静态和动态角度来表达我的系统设计了。
  3. ER设计:毕竟绝大部分是做一般的企业业务系统开发的,跟数据库打交道太多了,数据结构大部分是表设计,ER设计基本能满足。
  4. 回访:在做流程设计过程中,自己实现的业务流程到底对不对,有时最好回访一下需求提出者和利益相关人,对他们说说自己对需求的理解和设计方案,看看他们的理解如何,听听他们的再次对需求的叙述,自己设计对了吗。
  5. 咨询:咨询在这一块更熟悉的老同事,是一个事半功倍的好方法,有时别人一句话提醒就解决了我们的难题。 

2. 系统功能性设计

        

  1.  用例详细分析:一定要对需求分析阶段得到的用例图,不断详细分析揣摩,从实际分析出的功能点出发做系统分析设计,不要抛开用例图,动不动就从自己臆想的技术角度去做设计,这个现象见得太多了。
  2. 关键流程设计:如果存在复杂的流程,对关键流程要做一个恰当的设计,详细到什么程度自己把握,就是能指导自己编码实现就可以了,用UML时序图或活动图基本就可以了。 
  3. 关键类和包设计:关键类设计是非常重要的,都不用多说,包和子系统设计也是顺带的事情。
  4. 数据结构设计:数据结构的重要性毋庸置疑,程序=数据结构+算法等著名论断不少,而数据库表设计是最重要的设计,这个必须做好。
  5. 系统组件设计:我们设计的类和包到底分布在哪些组件里,这些组件是怎样关联的,是需要搞清楚的。
  6. 系统部署设计:最后就是软硬件系统的部署问题,清理各个子系统是怎么部署的。

3. 系统非功能性设计

  1.  考虑可用性和友好性:你们叫我做什么,我就做什么,其它一切不管,这种想法要不得。特别做前端界面的开发人员,软件功能可用性如何、实用性强不强,用户用起来麻烦不麻烦,都要考虑一下。做后台的开发人员,系统安装升级和维护,麻烦不麻烦,都要考虑一下。
  2. 考虑性能问题:速度如何,用户不可能等几分钟才看结果,即使功能正确了对用户也没有用。
  3. 考虑资源使用情况如何:对做后台的开发人员,至少要考虑CPU、内存、磁盘和网络的开销吧。
  4. 考虑数据量如何:如果你的系统属于大数据类的,数据会随着时间不停增长,那么这个问题很重要。如果你不考虑,刚上线是很正常的,说不定1个月之后某天就出大问题了。
  5. 考虑系统安全性:系统安全性常常是我们在开发过程中忽略的问题,说不定某天就被不明人员轻易攻破了,所以至少基本的安全问题要同时在设计过程中就考虑到。

4. 总结 

         系统设计主要是两个大方面:功能性设计和非功能性设计,非功能性设计常常会被我们遗忘或部分遗忘,导致系统上线之后或运行一段时间之后不可用,所以我们不能忽略。

 

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1572335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构篇:深度剖析LSM及与B+树优劣势分析

本文旨在探讨LSM的特性及其在实际应用场景中的作用,同时对其与B树进行比较,以帮助更好地理解和运用这两种数据结构。 什么是LSM(Log-structured Merge-tree) 全称 Log-Structured Merge-Tree 日志结构合并树,但不是树…

5G随身wifi真实测评!飞猫5g随身wifi怎么样?飞猫5GVS格行5G随身wifi哪款网速快?5G随身wifi推荐品牌第一名!

飞猫5G随身wifi: 产品外观:黑色大气外观,净重175g,屏幕有信号和指示灯。 产品性能:采用展锐芯片。6根LDS天线,网速100-200mbps,网络延迟10-20ms,2.4G/5G双频可选,超稳定…

【gurobi】python调用gurobi创建范围约束

1.python调用gurobi创建范围约束 要在Python中使用Gurobi创建范围约束,您可以使用 addConstr() 方法,该方法允许您指定约束条件的下限和上限。下面是一个示例,演示了如何创建一个范围约束: 假设您有一个变量 x,您想要…

软考114-上午题-【计算机网络】-路由

一、路由 二、真题 真题1: 真题2: 真题3: 真题4: 真题5: 路由协议实际上是一种在路由器之间交换路由信息的协议。 路由协议让路由器了解整个网络的拓扑结构,包括哪些网络是直接相连的,哪些网络…

数据库重点知识(个人整理笔记)

目录 1. 索引是什么? 1.1. 索引的基本原理 2. 索引有哪些优缺点? 3. MySQL有哪几种索引类型? 4. mysql聚簇和非聚簇索引的区别 5. 非聚簇索引一定会回表查询吗? 6. 讲一讲前缀索引? 7. 为什么索引结构默认使用B…

练习题(2024/4/6)

1最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,2,1,-4], target …

AI Agents产品图谱+网站合集

这个网站收集了市面受欢迎的项目,包括开源项目和闭源项目以及公司 地址:通过浏览列表中的AI代理项目和公司,社区里的创业者可以了解当前市场上的主要玩家和他们的产品特点,进行市场趋势分析和竞争分析。

了解这些技术:Flutter应用顺利登陆iOS平台的步骤与方法

引言 🚀 Flutter作为一种跨平台的移动应用程序开发框架,为开发者提供了便利,使他们能够通过单一的代码库构建出高性能、高保真度的应用程序,同时支持Android和iOS两个平台。然而,完成Flutter应用程序的开发只是第一步…

LC 226.翻转二叉树

226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入: root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入: root [2,1,3] 输出&#xff1a…

VMware-16.0配置虚拟机网络模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络?二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…

ARM、X86、RISC-V三分天下

引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…

计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

三点睡六点起,阎王夸我好身体 不到三点我不睡,太平间里抢C位 一、命名空间 1.命名空间的作用 2.命名空间定义 3.命名空间使用 二、C的输入输出 1.输入输出说明介绍 2.std命名空间的使用惯例 三、缺省参数 1.缺省参数概念 2.缺省参数分类 四、…

华为激光雷达真的遥遥领先吗?华为激光雷达详细拆解和系统方案分析(55图)

华为作为中国自动驾驶技术第一梯队的卓越代表,其激光雷达产品也备受瞩目,不过关于华为激光雷达的公开资料非常少,即便是有也非常粗略。 本文通过详细拆解华为96线激光雷达产品,尝试分析华为激光雷达的技术方案,并通过…

八股面试速成—Java语法部分

暑期实习面试在即,这几天八股和算法轮扁我>_ 八股部分打算先找学习视屏跟着画下思维导图,然后看详细的面试知识点,最后刷题 其中导图包含的是常考的题,按照思维导图形式整理,会在复盘后更新 细节研究侧重补全&a…

如何给上百张图片一键添加圆角?

一,为什么要给图片做圆角? 随着数字化时代的到来,图片已经成为我们日常生活中不可或缺的一部分。无论是社交媒体上的个人分享,还是商业宣传中的产品展示,图片都扮演着重要的角色。而在图片的呈现方式中,圆…

【第五篇】使用BurpSuite设定条目范围

【1】在对一个网站进行合法观察、测试的过程中,加载出的HTTP历史条目是十分繁多的,于是,对请求进行排序、过滤等显得至关重要。 我们可以单击#实现HTTP条目的升序或降序,这样我们可以在顶部看到最先或最旧的请求。 【2】通常HTTP条目中包含对多个站点的请求,若我们只想观…

SV学习笔记(七)

类型转换 写在前面 类型转换可以分为 静态转换和动态转换 。静态转换即需要在转换的表达式前 加上单引号 即可,该方式并不会对转换值做检查。如果发生转换失败,我们也无从得知。动态转换即需要使用 系统函数$cast(tgt, src) 做转换。静态转…

如何在 Mac 上恢复已删除的数据

如果您丢失了 Mac 上的数据,请不要绝望。恢复数据比您想象的要容易,并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过,请不要担心,因为您可以通过多种方法…

手机扫码获取文件怎么做?文件活码在电脑上的制作方法

现在很多人会把文件生成二维码之后,将二维码图片打印或者分享给其他人,通过扫描二维码的方式快速在手机上查看或者下载文件内容,从而提升文件传输的速度和效率。 制作文件活码二维码可以长期有效的扫码显示文件,支持多个文件存入…

nginx配置实例(反向代理)

目录 一、目标-反向代理实现效果 二、安装tomcat 三、配置nginx服务 四、配置反向代理 一、目标-反向代理实现效果 访问过程分析: 二、安装tomcat 1、安装jdk环境 新建/export/server目录 解压jdk 查看是否解压成功 配置jdk软连接 进入jdk的bin目录中&#x…