在我的软件职业生涯中,大部分时间都在设计与开发新系统。刚开始参加工作的时候,代码也写得不好,但也不会糟糕到开发效率越来越低的程度,也有业务不够复杂的原因。后来开始学大厂的开发规范、极限编程、敏捷软件开发与设计模式,再后来开始学软件架构相关的知识。在软件设计上,“Uncle Bob"对我的影响颇深,学习他写的书也比较多。
在这类书籍当中,里面讲到了稳定依赖原则、稳定与不稳定划分等概念。一开始并没有体会到这些概念的重要程度,只需遵守原则、重构坏代码,一切都很顺利。在亲自接手腐烂的代码项目之后,才深刻感触到代码与业务的关系就是“水能载舟,亦能覆舟”,处理好这些概念就变成跳出泥潭的关键。
继续阅读→
格雷迪说过:“所有的架构都是设计,但并非所有的设计都是架构”。
软件设计,可以提升代码的可阅读性、可维护性、可扩展性等;一个设计点对软件整体影响比较小,发生变更时代价比较小。避免过度设计,避免无设计,需要找到平衡点才能提升团队的生产效率。本文只关注编码上面的软件设计,不涉及需求分析等其它内容。
软件架构,可以提升系统的可用性、稳定性、高性能等,一个架构点可能影响到整个软件的结构、依赖关系、部署形态等,发生变更时代价往往是巨大的。即使在敏捷组织中,架构点往往需要在相关编码之前确定,编码过程中只进行微调——流程上与软件设计有比较大的差别。
本文中推荐一些软件设计与架构相关的书籍。我先接触到敏捷软件开发思想,所以,从设计模式到软件架构的很多书籍都跟敏捷宣言大佬有关。
继续阅读→