关于软件框架设计这个话题,思考了多天却不知道该从何说起,这是一个沉重的话题,每个人对于框架的理解可能不太一样,这源于个人的知识水平和认知层次,即使对于同一个问题,不同人员也会给出不同的设计模式,这些模式肯定都能解决问题,只是各有侧重,优缺点也不一定相同。经过几年的工作,看过几本书,经历了几个项目,在每个项目中,领导们都能给你看几张设计图,讲解该项目中各模块的设计方式和原则,在现在新的公司中,我又见到了新的基于反射的框架设计模式,另人受益匪浅。
也正式在新的公司中,我见到了一本书《Framework Design Guidelines》,该书中介绍了一个优良的框架设计应该满足的特质,列举并且翻译如下,这些新的知识将成为我个人经验的一部分,指导着我的实践。
- Well-Disigned Frameworks Are Simple
简单是一个好的框架必须有的特征,如果对于一个特征设计的复杂度产生第二想法的话,那最好在当前的Release中移除该特征,然后花更多的时间为下个Release去寻找更合适的设计,如果该这设计感觉不合适而强制发布的话,那么在将来很可能会后悔的。 - Well-Deisnged Fameworks Are Expensive to Design
一个优良的框架设计不会魔幻般的发生,它是花费了很多时间和资源努力工作的结果,如果你不想在设计上花钱,就不应该期待能创建出一个优良的框架。 - Well-Deisnged Fameworks Are Full of Trade-Offs
世界上没有完美的设计,设计都是权衡后的结果,为了做出正确的决定,需要了解各个选项,他们的优点和缺点。这本书中描述的一些实践被称之为指南而不是规则,就是因为框架设计需要管理权衡,一些权衡后的指南在特定的条件下需要考虑提供一些备选方案。 - Well-Deisnged Fameworks Borrow from the Past
大部门成功的框架都是借鉴以往和建立在已有的被证明的设计之上的,有可能并实际可取的引入一些新颖的解决方案,这些方案也需要做出慎重的考虑。随着一些新概念数量的增长,整体设计正确的可能性会有所下降。 - Well-Deisnged Fameworks Are Designed to Evolve
考虑到如何在将来演变你的框架,这是一把双刃剑。它能以“以防万一”的名义带来额外的复杂度,但是它也能避免您发布一些会随着时间的推移而退化的东西,或者更糟糕的是有一些东西会丧失向后兼容性。当对一个设计做出权衡时,应该回答一个问题,这个决定会对你的框架在将来演变的能力造成什么样的影响。 - Well-Deisnged Fameworks Are Integrated
现代化的框架应该设计成可以与其他大量的生态系统进行良好的整合,比如不同的开发工具,编程语言,应用程序模型。 - Well-Deisnged Fameworks Are Consistent
一致性是一个设计良好框架的关键特性,是影响生产力的一个重要因子。一致性框架允许知识在框架各个部分之间转移,在特定的特征领域中,也能帮助开发人员快速的识别出哪部分是唯一的,需要进行特别关注,哪部分与通用的设计模式相同。
发表回复