最不喜欢的设计模式

时间:2020-03-06 14:46:58  来源:igfitidea点击:

好的,我不是在寻找反模式,而是在寻找不是真正的模式,或者可能是滥用的模式。

我个人最不喜欢的是"助手"模式。

例如。我需要创建一个SQL查询,因此调用SQLQueryHelper。这需要处理一些字符串,因此依次调用StringHelper。等

看到这根本不是设计模式...

[编辑]
你们对此表示反对的人是否认为我们应该添加一个建设性的言论?

解决方案

辛格尔顿。

这是一个变相的全局变量,很难模拟/存根进行单元测试。

服务定位器更好,依赖注入/控制反转更好。

维基百科文章上的大多数参考文献都是关于它为什么是邪恶的。

"经理"类。例如

DataManager
BusinessLogicManager
WidgetManager

"经理"的****是什么意思?更加详细一些!如果WidgetManager具有太多的Widget职责,以至于没有更多具体的名称,则将其分解。

这是我在查看旧代码时与自己进行过多次的对话。

我认为不应盲目地使用设计模式,仅因为它很酷就可以实现它们:它们具有明确规定的上下文,并在适当时使用它们可能会有所帮助,但在其他情况下,它们只是浪费时间,而没有妨碍系统正常运行的障碍。

MVP。它是MVC,但已损坏。

哦,不,等等,开发应用程序与遵循"仅是视图"之类的良好实践完全不同。

更新

我引用了《 Pragmatic Programmer》一书中的"这只是一个视图"。我的主要问题是,几乎每个MVP实施都有持有主持人并告诉主持人做事的视图。从概念上讲,这是倒退的。 UI不应依赖于逻辑。它是"只是一个视图"。逻辑是应用程序的主要原因,如何显示该逻辑是次要问题。我可以使用一种Winform,也可以使用许多。地狱,我可以将整个内容输出到ASCII文本中,也可以通过将费用通过连接到艺术家的电线发送费用来创建"视图",该艺术家通过穿插式舞蹈的方式渲染视图。

实际上,这个前提确实有一些可行的用途。我过去编写的某些控制器具有许多视图,这些视图外部暴露,可以在应用程序认为合适的情况下推入UI。考虑实时数据馈送。我可以将其表示为统计数据,折线图或者饼图。也许全部同时!然后,保留在控制器上的视图看起来有点傻,父级是控制器,子级是视图。

传统的(表单持有演示者)MVP实现还有其他后果。一种是UI现在依赖于执行逻辑的代码,这意味着它还将需要引用逻辑需要的所有内容(服务等)。

解决此问题的方法是传入一个接口(同样,我看到的大多数MVP实现都具有创建演示者的形式,但是)。然后,尽管我从来都不喜欢将args传递给表单构造函数,但它成为了可行的模型。

归根结底,感觉就像人们在扭曲事物,试图证明已损坏的模型是合理的。我个人认为,MVP模式纯粹是为了合理化Visual Studio Windows窗体应用程序的工作方式而存在。他们以"形式优先"的心态开始。

"哦,这是表格,现在去拖拽控件和逻辑到UI中"

任何对util以外的应用都有经验的人都欢迎这种工作方式无法扩展。我认为MVP是实现这种规模的一种方式,但是这就像是IDE所倡导的破碎的"形式优先"开发模型的架构创可贴。

我认为MVC只是MVC,MVP是这种模式的混蛋。实际上,MVC的整个定义有点倒退。它的重要部分是关注点分离。我们正在使用的UI,逻辑,数据和/或者服务。分开存放。我们没有实现MVC来执行此操作,而是执行了此操作,因此最终得到了一种MVC形式。 MVP不适用于此,因为如果我们首先考虑"关注点分离",就不会获得MVP,如果我们被困在" Form First"领域,那么我们最终会获得MVP,并且我们觉得自己应该在做某事多一点MVCish。

无论如何,这就是我的看法。

战略

原因是我怀疑大多数人都被教导使用类和方法来实现它。

考虑以下Haskell代码:

ascending = sortBy compare somelist
descending = sortBy (flip compare) somelist
pairsBySecondComponent = sortBy (comparing snd) somelist

这就是实际的策略模式:"比较","(翻转比较)"和"(比较snd)"是这种情况下的具体策略(它们是普通的旧函数),并且函数签名为" a-> a- >订购是策略的"接口"。

简洁起见,说明设计模式不必太笨重或者笨重。我们想要在Java中实现策略(接口,类)的方法不是一个好方法。这是一种围绕Java工作的方式,为我们提供了我们需要完成的工作的错误抽象。这不应被认为是正常或者可接受的。

因此,假设我对教学方法的假设是正确的,那么我就不会非常喜欢该策略模式。

还有其他一些模式,它们也是常规"功能指针"模式的特定实例。基于同样的原因,我也不太喜欢它们。

我最不喜欢的是"将'Helper'或者'Manager'放在类名的末尾"模式。

编辑:而且正如克里斯指出的那样,我证明自己是个la脚的程序员,忘记了"实用程序"。