内容提要
本文辨析了“模式”与“模式语言”的定义:模式是特定情境下对常见问题的可复用解决方案,须包含问题、作用力、解决方案、结果及相关模式;模式语言通过模式间的替代、前后继、泛化等关系引导设计。作者批评滥用“模式”一词导致语义扩散、削弱其价值,并以Saga模式为例比较四种模式写作形式,建议作者与读者核查模式要素。
延伸解读
模式与模式语言的核心区别
文章强调,模式是特定情境下对常见问题的可复用解决方案,必须包含问题、作用力、解决方案、结果及相关模式。模式语言则通过模式间的替代、前后继、泛化等关系引导设计,而模式集合只是弱相关的模式列表。这一区分有助于读者识别真正有价值的模式资源,避免被误导。
语义扩散的危害
作者指出,滥用“模式”一词会导致语义扩散,削弱其价值。当缺乏情境、作用力和结果的解决方案被标为模式时,读者无法获得关于何时使用及代价的指导。长期如此,读者不再期待模式标签提供这些信息,模式语言标签也失去引导决策的作用。
模式写作的多种形式
文章以Saga模式为例,比较了Alexandrian、GoF、POSA和本站使用的四种写作形式。尽管结构不同,但都覆盖了模式的核心要素:情境、问题及作用力、解决方案、结果和相关模式。作者建议作者和读者在写作或阅读时核查这些要素,以确保模式名副其实。
Q&A
什么是软件模式?它包含哪些核心要素?
模式是对特定情境下常见问题的可复用解决方案。它必须包含问题、作用力、解决方案、结果以及相关模式。问题需明确陈述,作用力是使问题难以解决且解决方案必须平衡的考量,解决方案要具体到读者知道如何应用,结果包括好处、缺点和问题,相关模式则描述与其他模式的关系。
模式语言和模式集合有什么区别?
模式语言是一组解决特定领域问题的模式,模式之间具有丰富的关联关系,如替代、前驱、后继、泛化和特化。这些关系引导你从一个模式应用到下一个模式,从而生成完整设计。模式集合则是弱关联模式的集合,如GoF书中的模式,虽然有用,但不提供引导路径。
为什么把技术或设计称为模式会削弱模式的价值?
语义扩散会弱化术语。当缺乏情境、作用力和结果的可复用知识被标为模式时,标签承诺了关于何时使用及成本的指导,但描述并未提供。久而久之,读者不再期望任何称为模式的东西提供这种指导。同样,把技术集合称为模式语言,标签承诺了引导路径,但集合只提供列表。
模式有哪些好处?
模式有三个好处:第一,模式是炒作解药,因为它必须描述缺点和问题,提供平衡视角;第二,模式改进决策,通过比较替代模式的作用力和结果,将讨论转为权衡;第三,模式提供词汇,如Saga或CQRS,团队可用名称讨论设计而无需重复解释。
文章比较了哪四种模式写作形式?
文章比较了四种形式:Alexandrian形式(连续散文,以Therefore引出解决方案)、GoF形式(结构化,含Intent、Motivation、Applicability等12节)、POSA形式(围绕上下文、问题和解决方案,含Example和Example Resolved)、以及本网站使用的接近规范形式(含Resulting context和Related patterns)。
作者对模式作者和读者有什么建议?
对作者:在称某物为模式前,检查是否包含问题、作用力、解决方案、结果和相关模式;若缺失,可改称技术、设计等,或补充缺失要素。称集合为模式语言前,确保每个成员是模式且关系丰富。对读者:看到模式时,寻找问题陈述、作用力和结果;看到模式语言时,寻找丰富关系。