软件设计是设计什么?说下我现在的做法。
程序猿出文档,接口文档、数据存储相关文档(数据库文档、redis每个key的规则文档、es索引文档 等持久化和缓存的都要有)、框架结构uml、关键和复杂业务的时序、部署图。
为何需要这些呢?
1、接口文档
软件使用,就关注请求和响应,无论是cmd shell的交互还是图形化交互 或web页面,都是请求和响应,这种接口形式。所以接口文档很重要。
接口根据是否立马得到结果可以有同步、异步。根据逻辑是否复杂有简单的crud接口和复杂的接口。
2、数据库模型、redis的key规则等数据存储类设计图
在这之前一般会有关键业务的领域对象模型图,这里先说数据的。
程序就是读写数据。
程序跟人交互就是接口,而内部就是人们操作的数据。所以各种数据模型就很重要。
这个模型有数据库的ER等。
3、关键业务和复杂业务的模型以及时序。
这个跟数据模型关系密切,就像讲算法 脱离不了数据结构,讲数据结构脱离不了算法。
领域对象模型感觉是数据和业务算法的杂合体。应该是现有领域对象才有的数据模型和关键业务时序等这些。
关键业务和复杂业务模型,就是关键的和重要的,e...。
有些中间的数据结构也挺重要,但不完全是数据模型文档中的,比如 登录以后跟登录用户绑定的数据,一般跟session id绑定的,可以做一个文档。
4、框架结构uml图
这个跟业务有点关系,不过有时候是固定的。
拿web开发距离。web开发框架基本是mvc和业务逻辑 数据访问这类的 三层。mvc跟业务逻辑 数据访问的关系是分开的,这两个东西不是一个概念。
mvc是,v视图 现在都是前后端分离 这个基本就是接了。c就是控制器。m是数据,mvc没有规定m是怎么来的,只是直接用数据。这时候就要service业务逻辑和dao数据访问了。
mvc大体上框架的数据流转就是请求到控制器 到业务逻辑到数据访问。
框架结构图就是描述数据的大体流转的。因为你的代码有自己的设计。需要把这个描述清楚,比如在控制器中如何定义统一的响应规则 等等。
5、部署图
这个首先得知道网络拓扑,更多的是服务器拓扑图,不过现在有了docker后,网络环境复杂,比如k8s,fannel网络的使用,使几台服务器就跟以前一个机房的网络环境一样复杂。
部署图 更多的是关注服务部署情况。
做这些设计,不用过分纠结做文档的先后顺序,我做的过程中,基本都有返工,比如接口文档先出的,但跟业务相关的设计出来后 发现接口有调整。
做完设计后,就可以启动代码了。
在写代码的时候,可以把方法体里要写的逻辑 先用文字描述下,再写代码。
现在我写代码的阶段,简单的crud功能几乎没有返工,复杂接口返工会有,但总体还是少。现在代码质量比较高,最起码比以前高,而且一直在提高。
总结
开发时,出的文档有 接口文档,数据库文档等数据文档,框架结构文档,关键和复杂业务模型 时序,部署图。
原文地址:https://www.cnblogs.com/chengjunchao/p/10921737.html