欢欢:“你看我的代码用了策略模式和状态模式,假如后面客户会有这样的需求,可以无缝扩展,多么健壮!” 清扬一脸狐疑,心中念叨了数遍 :“哼,过度设计!”,只见她欲言又止,好几次话到嘴边又被自己咽回去了。
这种关于设计的讨论,袁帅最近一周不是第一次听到了,就在昨天他还看到清扬和正义的一次口水仗。最近清扬有点仕途不顺,几次被结对的搭档怼得无言以对。袁帅想为他的Buddy清扬“讨回公道”,但不是直接出面帮清扬怼回去。
设计的标准在哪里?
周五下午,公司内部的敏捷工程实践指导手册上醒目的三条价值观的「简单性」让袁帅陷入了沉思:
简单性:我们重视刚刚够用的设计。只为当下设计,不为未来可能出现的需求做设计。但是,我们做出的决策应当允许软件快速变更,能够快速响应需求变化。
「简单性」,看起来也似乎明白在讲什么,可什么是刚刚够用的设计呢?这句话让他想起来当年他在一次面向对象训练营的课后跟某个学员说过的一句话:“设计犹如西红柿炒鸡蛋,盐要恰到好处。” 这句话是如此的正确却又无比空洞。
设计的好坏本身没有一个标准的答案,这么多年,袁帅也在跟着软件界各路神仙学习设计原则,仍然处在似懂非懂的状态。他也深知每个人心中都有一杆秤。**什么是好的设计?**便成了公说公有理,婆说婆有理的问题,谁也难以说服谁。
这一次他不太想提那些空空如也的东西,为了能够让清扬快速掌握要点,他尝试将范围缩小到敏捷团队程序员交付用户故事卡时的编码设计,避开架构设计。从变量、常量、方法、类、类与类之间的关系、对象的交互开始。
重温旧文:简单设计
周六,袁帅很早就钻到书房,点燃背景音乐《稻香》,打开博客主页,发现了一篇多年前写的文章《简单设计》,仔细通读一遍之后,他觉得还不错,可以作为入门,发给清扬阅读,约下周一大一早去公司讨论。
他花了近一个小时将文字润色,也基于最近对设计的体会调整了部分内容,保留了文章的整体脉络。
用具体的词汇表达设计
抽象的设计问题大大提升了初学者的学习门槛,想得太多怕被说过度设计,吃饱撑着没事找事。想少了,又怕被人认为能力不足,无脑编码。到底怎么办,怎么样才能做出好的设计?SOLID、GoF的23种设计模式、STUPID、GRASP这些原则学会了就可以了吗?No,统统忘掉这些抽象不接地气的设计原则。
起步,尽量别为难自己。极限编程领域的大师程序员Kent Beck很早前就提出了4条相对容易理解的参考原则: