设计是要把脑子里关于产品的构想表达出来。而软件产品的设计除了核心价值点的定义,需要对业务流程、交互界面、数据模型进行充分定义,形成可用于指导开发的详细设计说明。
详细设计说明的编写,目的是建立用户需求与开发人员之前的桥梁。因此,简单实用且技术化应该是这份文档的特点。
过去软件系统也会有详细设计说明书,但是多是流于形式。开发人员拿到文档也不知道从何入手。只能依靠开发人员的经验进行,最后完成成什么样子一开始没有办法预知。
对于详细设计说明书,自己一直比较赞同将它用于特定的模块、组件或是功能这样细粒度的开发。不宜站在系统角度进行思考和开发,但是需要基于总体需求规格、概要设计、数据库设计、接口设计所明确的内容和设计原则。
内容上主要分为五个方面。
一是需求整理,这部分内容是把用户的业务目标,特定业务需求,完全站在用户角度对需求进行客观描述。
二是流程定义。基于需求描述,一项重要的事情是业务流程及子流程的梳理。能够通过流程图展现业务流转过程,如果是涉及到多用户协作的流程,需要采用泳道图。流程图需要基于业务目标,把达成业务目标所要完成的业务步骤以图形化的方式进行呈现。如果是后端业务模型,用流程图附以描述即可用来与客户对需求进行初步确认。确认好流程后再进行进一步设计。
三是原型定义,对于有人机交互的系统,原型设计最能直观表达用户需求。如果说流程图是业务流程的抽象表达,那么原型则更为具象,实际上原型设计之前应该还有一个初步的IPO分析,重点是提取输入和输出信息,这个阶段本质是一个IO分析,具体实现细节不做细化。
而原型是用来与用户进行进一步确认最佳载体。不仅能验证业务流程,还能确认IO的详细信息。
四是数据模型定义。在确定了系统流程和界面原型,确定了每个阶段输入输出后,系统所涉及的数据模型及其也就浮出水面。剩下的工作就是围绕每个环节的输出进行存储设计。对于关系型数据设计数据表和相关索引外键等属性,对于文件型数据根据概要设计定义的文件数据存储规则定义具体存储细节。这里可以引用概要设计的内容。数据库设计地输出能够指导开发人员完成建表和存储环境的搭建。
最后是接口定义,基于前面IPO分析,已经提取了每个环节及其子环节的输入和输出,这些输入输出整好作为接口的参数和返回值。而为了能够把实现细节交代清楚,需要对接口内部逻辑进行描述,如果需要调用第三方接口或模型也需要交代清楚。
其实不管复杂还是简易都不是重点,而是需要考虑在用户和开发人员之间,需求和功能之间,现实对象各抽象模型之间架起一座桥梁。理解我们写的是给谁看的,关注他们能读懂,是否站在受众角度去编写,能否正确传递信息,实用才是关键。