03.在实际的项目开发中,如何避免过度设计和设计不足
设计的初衷是提高代码质量
应用设计模式只是方法,最终的目的,也就是初心,是提高代码的质量。具体点说就是,提高代码的可读性、可扩展性、可维护性等。所有的设计都是围绕着这个初心来做的。
设计的过程是先有问题后有方案
如果我们把写出的代码看作产品,那做产品的时候,我们先要思考痛点在哪里,用户的真正需求在哪里,然后再看要开发哪些功能去满足,而不是先拍脑袋想出一个花哨的功能,再去东搬西凑硬编出一个需求来。
设计的应用场景是复杂代码
设计模式要干的事情就是解耦,也就是利用更好的代码结构将一大坨代码拆分成职责更单一的小类,让其满足高内聚低耦合等特性。创建型模式是将创建和使用代码解耦,结构型模式是将不同的功能代码解耦,行为型模式是将不同的行为代码解耦。而解耦的主要目的是应对代码的复杂性。设计模式就是为了解决复杂代码问题而产生的。
持续重构能有效避免过度设计
为了避免错误的需求预判导致的过度设计,我非常推崇持续重构的开发方法。持续重构不仅仅是保证代码质量的重要手段,也是避免过度设计的有效方法。在真正有痛点的时候,我们再去考虑用设计模式来解决,而不是一开始就为不一定实现的未来需求而应用设计模式。
避免设计不足的 3 个必要条件
首先,你要有一定理论知识的储备。比如你要熟练掌握各种设计原则、思想、编码规范、设计模式。理论知识是解决问题的工具,是前人智慧的结晶。没有理论知识,就相当于游戏中没有厉害的装备,虽然可以靠身手徒手打怪,但肯定会影响你最高水平的发挥。
其次,你还要有一定的刻意训练。很多同学很苦恼,说理论知识都学过,但是很容易忘记,遇到问题也想不到对应的知识点。实际上,这就是缺乏理论结合实践的刻意训练。我们回想一下上学的时候,我们是如何学习的。老师讲解完某个知识点之后,往往会配合讲解几道例题,然后再让你做上个几十道题去强化这个知识点。这样当你再遇到类似的问题的时候,就能不由自主地联想到相应的知识点。而工作之后,我们自己看书学知识,别说拿几个场景来实践了,大部分都是走马观花地看看,没有经过刻意的训练,知识积累不了,能力也锻炼不了,等于白学。
最后,你一定要有代码质量意识、设计意识。在写代码之前,要多想想未来会有哪些扩展的需求,哪部分是会变的,哪部分是不变的,这样写会不会导致之后添加新的功能比较困难,代码的可读性好不好等代码质量问题。有了这样的意识,实际上,你就离写出高质量的代码不远了。
不要脱离具体的场景去谈设计
设计是一个非常主观的事情,不夸张地讲,可以称之为一门“艺术”。那相应地,好坏就很难评判了。如果真的要评判,我们要放到具体的场景中。脱离具体的场景去谈论设计是否合理,都是空谈。这就像我们经常说的,脱离业务谈架构都是“耍流氓”。