如何编写方案设计文档
从程序设计的本质入手
程序 = 数据结构 + 算法 + 流程
我们需要在一开始,就把这三要素给讨论确定下来。这部分内容花费的时间多一点也是很值得的。
缺少了这三要素的设计,你写的程序就会出现很多问题,比如:
- 想到哪里写到哪里,最终写成流水账
- 工作量难以评估,对于完成节点不可预估
- 后期发现数据结构不合理,得推翻重来;或者得做一些很不优雅的兼容性处理
- 方法很长,且代码容易出现在不该出现的文件、类、方法里面
内容要点
1、整体的架构图(有哪些模块、模块之间的关联关系)
2、核心功能的主要流程(流程图),比如用户操作流程、图表渲染流程
3、【重要】技术难点(难点描述、技术选型的调研、PlanABC解决方案的描述)
4、全局功能的方案描述(比如路由、存储、接口等等)
5、文件目录结构(每个目录的职责)
6、模块的实现描述(参考期货的例子)
开发自问
这是参考自手机这边的checklist。
一、可用性
1.是否存在单点问题。
2.接口性能是否符合业务需要,缓存是否合理。
3.是否支持快速扩容。
4.使用的外部服务依赖(例如认证接口)是否进行了性能确认。
5.外部服务依赖不可用是否有报警及异常处理。
6.计划任务是否存在卡死的风险。
7.服务器重启后,是否可以保持可用。
二、存储
1.数据存储选型是否合理。
2.存储系统性能及存储空间是否进行了评估和确认。
3.建表是否设置了索引,是否存在可能导致慢查询的复杂sql语句。
3.数据表是否有必要进行分表分库。
4.redis存储是否存在bigkey,命令的时间复杂度与空间复杂度是否有过评估。
5.缓存(例如redis)是否合理设置过期时间。
三、日志、运维与安全
1.日志记录是否合理,是否监控。
2.运维部署步骤是否易于操作。
3.是否存在安全漏洞使系统遭受攻击或者数据泄露。
4.内存及cpu是否占用过大,是否会对服务器造成巨大压力。
5.数据传输是否过大,对公司带宽层面是否有影响。
四、其他
1.项目中是否用到了什么新技术吗?为什么要用新技术?未来其他人接手容易吗?
2.项目中有什么复杂计算的地方吗?这些计算可以用什么算法优化吗?
3.这个项目可以抽象出来什么可以复用的东西吗,是否可以贡献公共组件。
4.请求同步处理还是异步队列处理比较好。
5.服务接口的URI设计合理吗?可以向下兼容吗?