为了避免出现类似于 Datum 是最好的语言这一类的问题,在那之前,我得先阐述一下对于模式的看法:
模式是对于惯用方式的总结,不限于编程,有相当多的人习惯了使用各种设计模式,但是他并不知道这是何种模式。它是一个概念字表,用于快速沟通。
模式是解决方案,满足锤子定律,只有遇到特定的问题时,你才会需要它。
模式是适用于特定场景的,大部分的模式对于当前所处的系统是无用的,往往只有少数的模式是适合的。
模式是知识体系的展现,掌握模式的多少,更多的说明见多识广,并不一定代表真实的代码水平和能力。
模式需要刻意练习,学习模式是一个漫长的过程,所以总会遇到理解解决、使用错误的情况,不要担心。
模式种类繁多,计算机行业普遍认同的是:模式的起源是亚历山大的《建筑的永恒之道》。在更早的时间里,也还有对应的总结,但是这里是最体系化的技巧。
除了设计模式之外,我们所处的行业还有大量的其它模式:
容器设计模式。应对于云原生应用下一系列复杂的分式场景,Google 的工程师发表了相关的论文对此进行总结,常见的有 Sidecar、Adapter、Ambassador 等。
架构模式。架构模式是在给定上下文中解决软件架构中常见问题的通用,可重用的解决方案。除此,一些常见的架构风格,如微服务、事件驱动架构等,从大类上来说也被归纳到架构模式中。
……
所以,你会发现这些模式只是人们对于惯用法的总结。
回过头来看,当我们会发现进入一个新的领域,进行相关领域的架构设计之时,我们会不断搜寻各类的资料,而后再去贴合到设计中去。实际上呢,我们是在寻找该领域的模式,有了这些模式,便可以照猫画虎的设计一个系统,而不会出现太大的问题。
运气好的情况下,我们甚至于能比在这个领域的大多数人做得更好 —— 因为我们所掌握的是解决这一类问题的模式。
这时,我们已经有一个很有优势性的套路,以帮助我们更好地进入新的领域。但是呢,作为一个新的领域的初来者,往往不知道到底应该采用哪一种模式,也不确定模式之间存在何种关系。