软件的艺术之美源于权衡(Trade-off)
软件架构师的主要职责是什么?是抉择、是权衡。把软件称为艺术一点都没有夸张,可以说软件是科学、工程、与艺术的结合体。软件的艺术体现在权衡上。在这一期的《程序员》杂志上看到了一篇“鱼与熊掌--完美主义架构师的梦魇”,其中关于权衡要素的论述正切合我之所想,现将主要部分转摘如下,如果想了解更详细内容,请在本期程序员阅读全文。
(1)Time or Space 时间 vs. 空间
牺牲内存换取时间或牺牲时间以节省内存是我们常用的伎俩。
(2)Elegancy or Efficiency 优雅 vs. 效率
比如,多态很优雅,却是以效率为代价,而丑陋的函数指针却正好相反。
(3)Fashion or Familiarity 不熟悉的新技术 vs. 熟练的旧技术
是采用最新、能提高开发效率却我们不熟悉的新技术,还是继续使用我们很熟练的但是开发效率低下的陈旧技术了?
(4)Revolution or Evolution 革命 vs. 继承
对于遗留系统,我们是推翻重来,还是在其基础上进行改良重构并增强了?
(5)Under-Design or Over-Design 轻度设计 vs. 过度设计
设计,需要细化到何种程度、需要多长时间?
架构设计的限制始终围绕了软件质量的11要素:正确性、可靠性、有效性、完整性、可用性、可维护性、灵活性、可测试性、可移植性、可重用性、可互操作性。