传统软件开发中的详细设计:
- 模块内的数据结构进行设计。比如模块中类、结构体的设计
- 对数据结构进行物体设计。比如数据库表的设计,文件存储的设计,文件存储目录的设计
- 每个模块进行详细算法设计。比如每个方法的实现算法,对方法的实现画出流程图
- 编写详细设计说明书。详细说明每个方法的输入和输出。
- 详细设计评审报告。
现在公司都使用敏捷开发,认识敏捷开发:
- 以用户需求进化为核心
- 采用迭代、循序渐进的方法进行软件开发。
敏捷开发中详细设计的目标:
- 让代码保持简洁。比如在详细设计时使用规范的命名来提高程序的可读性
- 让设计拥抱变化。从需求的本质出发来设计类和方法,来提高它的灵活性
- 在产品迭代中“越跑越块”。
详细设计对技术团队的好处:
- 为构建高并发、高可用和高扩展的应用打下良好的基础
- 在产品迭代中“越跑越块”。
- 有效降低程序“推到重来”的概率
- 减少产品运行中的错误。
详细设计对开发者个人的好处:
- 更加清晰、严谨的逻辑思维能力。
- 良好的面向对象设计能力。
优秀的详细设计,需要具备一下能力:
- 良好的面向对象思维
- 懂得如何在设计思路、开发周期、业务需求之间取舍
- 熟悉产品技术架构模型
- 深入了解产品行业,熟悉业务的细节,并能洞察业务未来
详细设计初学者的学习思路:
- 从为每个方法、每个类起个好名字做起
- 培养实现代码前,做详细设计的习惯
- 让总结成为一种习惯
推荐书籍:
- 代码整洁之道
- 重构-改善既有代码的设计
- 敏捷软件开发:原则、模式和实践
- 设计模式(大话设计模式、设计模式之禅)
- 高效程序员的45个习惯(团队管理、持续学习)
详细设计有“章法”,但没有“公式”
“章法”:规范,比如命名、注释等。
这些不是“公式”:设计模式、相同业务功能的经典案例等。
- 详细设计永远把解决当前问题,放在第一位。
比如一个积分兑换系统实现使用积分可以兑换话费功能。此时我们会想到使用设计模式中的策略模式,以便支持各种规则的兑换。但是当前第一版的需求只是兑换话费,现在引入策略模式会增加代码的复杂性,是不值得的。
- 详细设计中,欢迎“拿来主义”。优先考虑使用市面上的成熟产品。优点:节省大量的开发成本、时间成本、人力成本。缺点:个性化需求、依赖第三方,如果第三方软件不能使用,那么可能整个程序就无法使用。
如何表达设计
UML作为表达详细设计的缺点:
- 团队成员都需要懂UML图
- UML转换为代码,需要一定的时间
- 在需求变化中,UML很难保持即时性
UML并不适合,在追求简单、快速、拥抱变化的详细设计中来表达设计。
文档作为表达设计的一种方式,完善的文档可以记录系统的设计过程和设计思路。在传统的软件开发中,通常把文档作为需求分析、概要设计、详细设计的产物。
优点:经验开发继承、加深系统了解、提高写作功底等。
缺点:开发周期增加、增加文档维护成本、很多开发人员不乐易等。
使用代码表达设计,详细设计时直接通过编写代码以及代码注释来表达自己的设计思路。
在详细设计过程中,产生如下具体产物:
- 设计实体类
- 设计前后端调用方式以及数据格式
- 设计业务接口。就是定义输入和输出,以及业务接口的实现方式
- 设计数据库访问层接口
- 设计数据库表结构,字段、字段类型、索引等。
UML:适用于系统设计、详细交流设计、设计评审、系统设计文档等。
代码:适用于敏捷开发中的详细设计