设计的艺术
故宫太和殿,米兰大教堂,造型各异,但我们都觉得很美,这是因为这些建筑都有一些共同的优秀结构。这些共同的结构,如果用专门的可以度量的客观标准来评价,就叫做模式。继而展开到人类社会,模式可以归纳为,描述会不断重复出现的问题并进而提供解决这些问题的方案的要素。通过模式,解决方案能够千百万次地反复应用。
程序员们把这种模式的思想应用于软件设计——称为设计模式( design pattern)。于是在程序设计中的设计模式有了建筑学中的相同的作用:
1. 复用解决方案——通过复用已经公认的设计,能够在解决问题时取得先发优势,而且避免重蹈前人覆辙。可以从学习他人的经验中获益,用不着为那些总是会重复出现的问题再次设计解决方案了
2. 多数设计模式还能使软件更容易修改和维护。其原因在于,它们都是久经考验的解决方案。所以,它们的结构都是经过长期发展形成的,比新构思的解决方案更善于应对变化。而且,这些模式所用代码往往更易于理解——从而使代码更易维护
3. 模式还为我们提供了观察问题、设计过程和面向对象的更高层次的视角,这将使我们从“过早处理细节”的桎梏中解放出来
以前学习设计模式的时候,很大程度上只停留在理论上,对应有些模式的应用也只是约定俗成,没有很强的理解和触碰心灵的体会,直到最近遇到的麻烦。比如Façade模式,中文叫做面板模式,就是把许多接口放在一个文件里面,程序里其他需要用到接口的地方,都调用这个文件里面的方法。非常简单的一个模式,似乎对它不肖一顾,因为过于简单,甚至觉得可以删去不用了,直到最近需要更改大量的数据接口,才意识到应用设计模式的重要性,尤其是上述第2点。
感谢设计模式
因为深受学院派作风的影响,所以当初写集成量化平台的时候,引入了大量的设计模式,也包括了这个Façade模式。这个模式包含了所有的数据访问接口,其他模块诸如持仓,交易,报表,回测等等都只跟Façade打交道,至于数据访问的实现,其他模块甚至Façade本身都是不清楚的。这就是抽象和解耦,用现在时髦的话来说就是隔离。因为有了隔离,数据访问如果出现了问题,并不会直接影响到逻辑层面的代码,可以说一点都没有影响。所以,如果因为数据提供商的问题或者数据源不稳定,需要切换数据源或者重新实现数据访问方法,所有的改动只有在数据访问层。而所有用到数据接口的其他大面积的逻辑层面,没有一丁点的改动。这大大增加了系统建设升级的效率,显著提高了代码的健壮性和韧性。这就是façade模式的好处,因为简单,所以可以说四两拨千斤,真不知道如果没有façade层,逻辑应用方面直接跟数据打交道,那么这场数据接口改动能不能快速的完成,甚至是否能成功都是个问题。可以说这次的代码重构,大大加深了我对设计模式的理解,可谓实践出真知。
项目
继续倡导敏捷开发实践,增加测试驱动开发(TDD)和scrum的经验。
以上文字权为反省。