【问题标题】:AntFarm anti-pattern -- strategies to avoid, antidotes to help heal fromAntFarm 反模式——避免的策略,帮助治愈的解毒剂
【发布时间】:2009-02-05 00:38:24
【问题描述】:

我正在开发一个带有数据库后端的 10 页网站。有 500 多个对象在使用中,试图在 ASP.Net 中实现 MVP 模式。我正在从单页跟踪代码执行,我的手指已经在 Visual Studio 中的 F-11 上停留了大约 40 分钟,似乎没有尽头,一个网页可能有 1000 多个方法调用!然而,如果只有 50 个对象,那将是一回事,代码执行会蜿蜒穿过所有这些对象,就像数百万只蚂蚁在它们巨大的土堆房子里疯狂地工作,到处都是对象隧道。 因此,一个新的反模式诞生了:AntFarm

AntFarm 也称为“OO-Madnes”、“OO-Fever”、OO-ADD 或简称为设计模式迷。

这不是我第一次看到这种情况,我在其他公司的同事也不是第一次看到。似乎这种风格正在被积极宣传,或者无论如何是对周围众多OO / DP福音的误解......

我想在反模式中引入一个反模式:GST 或“Get Stuff Done”AKA “Get Sh** done”AKA GRD (GetRDone)。这种模式专注于它所说的,以一种简单的方式完成工作。我可能会尝试在以后的帖子中对其进行更多概述,或者请分享您对这种解毒剂模式的想法。

无论如何,在我写作的时候,我正处于 AntFarm 反模式的一个很好的例子中(作为奖励,没有文档或 cmets)。请分享您对这种反模式如何变得如此流行的想法,我们如何避免它,以及如何在必须使用的实时系统中撤消或处理这种模式!

【问题讨论】:

  • 好问题,我认为开发团队认为他们正在做一些单元测试......就像他们实施的许多其他模式一样,他们会从一个想法开始,然后在激烈的战斗中有时会开始分崩离析。不过,对于这种复杂的架构,我不确定单独测试本身是否会有这么大的帮助。

标签: asp.net design-patterns oop anti-patterns


【解决方案1】:

我认为 Parnas 在On the Criteria to be used in Decomposing Systems into Modules 中非常成功。每个模块都应该隐藏一个设计决策,这个决策将来可能会改变。一般来说,没有什么可隐藏的模块通常只是开销。他并没有确切地谈论课程,但我认为推理仍然适用。

【讨论】:

    【解决方案2】:

    如果确实是由于过度设计(听起来很像),那么这里有一些同义词:

    Gas Factory
    鲁布·戈德堡机
    希思罗宾逊装置

    但我个人的名字是“努力太F#$%3n”。我的哀悼。

    干杯 阿德里安

    【讨论】:

    • 这是一种很好的表达方式(后一种描述)!
    【解决方案3】:

    许多文件可以做。可恶的。 10 个网页 500 个对象似乎是一个疯狂的比例。 您是否考虑过对解决方案运行代码分析?可能会给你一些有趣的统计数据来反击。

    我也将反反模式称为 KISS。

    【讨论】:

      【解决方案4】:

      感谢格洛梅克,这篇文章提供了一个有趣的问题空间,进入了 OO 的核心,即如何设计您的对象...对于成功或失败,感谢您的链接。

      哦对了,反模式设计可以叫“蚂蚁山”,我觉得这样描述比较清楚。我确实相信它现在非常流行,并且似乎正在增长......我仍然想知道我们如何才能从总体上摆脱它,并编写更清晰、更简单的代码来完成工作所需的最小复杂性.

      【讨论】:

        【解决方案5】:

        这里的问题是您的设计模式本身就是非面向对象的。从非 OO 模式开始,尝试将其实现为“对象”,结果会一团糟。

        仅仅因为系统是用 OOPL 编写的,并不会使系统 OO。

        【讨论】:

          【解决方案6】:

          如果您认为蚂蚁农场是一种通过使用简单代理(蚂蚁)探索复杂问题空间(蚂蚁农场)的有效方式,那么这看起来显然不那么反模式。

          基于“将所有东西都装在你的脑海中”的复杂性对 OOP 的批评总是忽略 (a) 很难将所有东西都装在你的脑海中(无论它是否 OO)和 (b) OO积极地减少了无论如何都在脑海中的需要

          【讨论】:

          • 那么您是提倡使用 50 个对象创建基本网页的学派吗?你们有很多人在那里......
          • 一个基本的字符串连接很可能会让你超过 50 个对象,更不用说让你处理 http 请求所需的所有样板文件了。至于什么数字是可以接受的......出于同样的原因,我不会在对象的数量上加上数字,我不会在渲染页面中可以拥有的元素数量上加上数字,这将取决于页面在做什么。
          猜你喜欢
          • 1970-01-01
          • 2011-08-18
          • 1970-01-01
          • 2019-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多