个人项目在开发之前需要进行详细的设计吗

谢题主 @姜山 之邀!在独立开发一些中小型项目的时候,特别是web项目,我之前的做法就是上手就做。但是这样做显然是非常不好的…在开发途中稍有需求变动代码就会变得混乱。这是一个常见的 bad smell,说明你可能设计模式用得不好(许多设计模式就是用来应对需求的变化),或者架构设计不足。代码反映你的设计(尤其是你大脑中的思考),代码混乱,说明你的设计混乱,稳定性差,设计的前瞻性不够。上手就做,这没错,但写代码、做的同时,依然需要你随时做出足够的设计(Just Enough Design or Just-In-Time Design)。我想知道其他的个人开发者除了做单元测试以外,会在开发之前进行一些很详细的设计吗?大家又是如何设计的呢?个人开发(一个人的项目),同样可以是敏捷开发,迭代、递增、演进式的开发。通常不需要而且没必要做详细设计(如细化到每个类的每个方法、参数),但通常都会做架构设计(概要设计),演进式地设计。首先,开发前要把你这一次迭代中做的需求搞清楚。我用的是 Use Case(用例)分析,比 User Story 强 n 倍。最好把用例文本写出来,便于搞清楚各种复杂的需求细节。其次,架构设计用 UML 来做,对整个系统的骨架、基本轮廓要做到心中有数、胸有成竹。开发的前几个迭代主要是验证架构设计(主体结构)的正确性。架构模型包括系统分层,核心的执行流程,有哪些关键的接口、包、类,关键的交互等等。对于较复杂的设计,最好把 UML 图画出来,便于反复研究和思考。
■网友
必要的设计肯定还是需要的。比如数据库的设计,采用什么样的框架,等等。不过我觉得也不需要过于详细的设计。在实现代码的时候,为将来可能的变化做一下考虑。单元测试是一个好的实践。编码规范,代码评审,重构这些都是很好的实践。如果有可能,和公司的其他人讨论下设计方案,效果会更好一些。


    推荐阅读