我正在研究模式和反模式。我对模式有一个清晰的概念,但我没有反模式。来自网络和维基百科的定义让我很困惑。
有人能用简单的话给我解释一下什么是反模式吗?目的是什么?他们做什么?这是好事还是坏事?
我正在研究模式和反模式。我对模式有一个清晰的概念,但我没有反模式。来自网络和维基百科的定义让我很困惑。
有人能用简单的话给我解释一下什么是反模式吗?目的是什么?他们做什么?这是好事还是坏事?
当前回答
今天,软件工程研究人员和实践者经常互换使用术语“反模式”和“气味”。然而,它们在概念上并不相同。维基百科上关于反模式的条目指出,反模式与坏实践或坏想法至少有两个不同之处。反模式是
一种常用的过程、结构或行为模式 最初看起来是对一种疾病的适当而有效的反应 问题,通常有更多的坏后果比有益的结果。”
它清楚地表明,选择反模式是因为相信它是当前问题的一个很好的解决方案(作为模式);然而,它带来的负债多于收益。另一方面,气味只是一种糟糕的实践,它会对软件系统的质量产生负面影响。例如,Singleton是一种反模式,God类(或不足模块化)是一种设计气味。
其他回答
因为模式是被发现的,而不是被创造出来的,Allen Holub,这种发现是通过重复发生的;如果我们发现了一个解决特定问题的模式,但不是根据领域专家的知识和经验以正确的方式解决的——我们倾向于称其为反模式
模式:解决常见的、反复出现的问题的正确方法。 反it模式:不是解决常见的、反复出现的问题的正确方法。 这两种方法都是基于最新的知识
和…昨天的有害实践就是明天的反模式Neal Ford,持续交付的工程实践
DevOps世界示例
它曾经是一个最佳实践(构建共享资源)
但在云世界中,当我们在云中管理资源时,它引入了耦合。
所以现在我们倾向于基于解耦或解耦来构建我们的设计
因此,对于特定的领域,例如DevOps:
过去: 共享资源== pattern ==好事 礼物: 共享资源==反模式==坏事 解耦==模式==好事
总之
更喜欢模式而不是反模式
图片来源:Neal Ford,持续交付工程实践
如果您确实希望学习反模式,请阅读《反模式》(ISBN-13: 978-0471197133)这本书。
在这篇文章中,他们定义“反模式是一种文学形式,它描述了一个问题的常见解决方案,该解决方案会产生明显的负面后果。”
因此,如果这是一种糟糕的编程实践,但并不常见——出现的频率非常有限,那么它就不符合AntiPattern定义中的“模式”部分。
反模式是软件开发中被认为是糟糕编程实践的某些模式。
设计模式是解决常见问题的常用方法,已经形式化,通常被认为是一种很好的开发实践,与之相反,反模式是不可取的。
例如,在面向对象编程中,思想是将软件分割成称为对象的小块。面向对象编程中的反模式是一个上帝对象,它执行许多功能,最好将这些功能分离到不同的对象中。
例如:
class GodObject {
function PerformInitialization() {}
function ReadFromFile() {}
function WriteToFile() {}
function DisplayToScreen() {}
function PerformCalculation() {}
function ValidateInput() {}
// and so on... //
}
上面的例子有一个对象可以做所有事情。在面向对象编程中,最好为不同的对象定义明确的职责,以减少代码的耦合,最终更易于维护:
class FileInputOutput {
function ReadFromFile() {}
function WriteToFile() {}
}
class UserInputOutput {
function DisplayToScreen() {}
function ValidateInput() {}
}
class Logic {
function PerformInitialization() {}
function PerformCalculation() {}
}
总的来说,有很多使用常用模式(设计模式)开发软件的好方法,但是也有一些开发和实现软件的方法可能会导致问题。被认为是糟糕的软件开发实践的模式是反模式。
今天,软件工程研究人员和实践者经常互换使用术语“反模式”和“气味”。然而,它们在概念上并不相同。维基百科上关于反模式的条目指出,反模式与坏实践或坏想法至少有两个不同之处。反模式是
一种常用的过程、结构或行为模式 最初看起来是对一种疾病的适当而有效的反应 问题,通常有更多的坏后果比有益的结果。”
它清楚地表明,选择反模式是因为相信它是当前问题的一个很好的解决方案(作为模式);然而,它带来的负债多于收益。另一方面,气味只是一种糟糕的实践,它会对软件系统的质量产生负面影响。例如,Singleton是一种反模式,God类(或不足模块化)是一种设计气味。
就像设计模式一样,反模式也是一个模板,也是解决某个问题的可重复方式,但是以非最佳和无效的方式。