Mat*_*nes 31
我所遇到的大多数对设计模式的批评都与对他们认为只是良好的面向对象实践的结构和标签的厌恶有关.大多数模式归结为接口编程和其他SOLID原则.我们的感觉是,当我们教授模式时,我们会让开发人员,特别是初级开发人员尝试将所有问题都塞进他们所学习的模式集中,与他们采用更"直截了当"的方法相比,这会产生更多迟钝和麻烦的问题. .
我倾向于同意这样的观点:一旦你开始学习模式,你就会过度使用它们,但是,通常你会很快离开那个阶段,然后进入一个更高效和专业的软件职业.
作为奖励,这里有一些来自杰夫阿特伍德的温和批评 以及马克·多米努斯的一些批判性见解
小智 6
艾伦·凯(Alan Kay)本人对模式非常挑剔,因为他不认为软件应该这么夸耀。这是2012年Dobbs博士对Kay的采访。
“关于编程的最灾难性的事情—从编程中十种最灾难性的事情中选择一种—有一种非常流行的基于模式语言的运动。当克里斯托弗·亚历山大(Christopher Alexander)首次在建筑领域做到这一点时,他正在研究人类已经有2000年的历史了。让自己感到舒适,所以实际上有一些东西,因为他正在处理一个变化不大的基因组,我认为他从中得到了数百个有价值的模式,但是在计算中尝试这样做的错误假设我们对编程一无所知。因此,从当今的编程实践中提取模式会以一种他们不应该得到的方式使它们高尚。这实际上使他们更具了声望。”
对设计模式的一大批评是关于某些设计模式到底有多“通用”。例如,策略模式的实现在缺少 lambdas/first-class 函数的语言中似乎更相关(和复杂)(比较 Java 与 Ruby,甚至与 C#“函数式”方法,这里)。
但我认为这个论点忽略了这样一个事实:设计模式确实存在(因为我们可以在代码中感知模式,任何代码),而且它们也可以作为一种很好的、与语言无关的方式来描述和理解软件架构。因此,当然,某些设计模式在某些编程语言中更容易实现(或直接受其支持)这一事实是需要注意的,但这与恕我直言无关。
当然,我也同意许多企业设计模式不适合纯函数式语言。但我也相信函数式世界也有自己的一套设计模式(比如Monad)。