【问题标题】:What is interface bloat?什么是界面膨胀?
【发布时间】:2009-12-12 17:00:05
【问题描述】:

谁能向我解释一下 OOP 中的接口膨胀是什么(最好有一个例子)。

【问题讨论】:

标签: oop anti-patterns


【解决方案1】:

生日,

假设您指的是 API 而不是 GUI,对我来说 I/F 膨胀可能以多种方式发生。

  1. API 只是不断扩展和扩展新功能而没有任何形式的隔离,因此您最终会得到一个难以使用的单一头文件。
  2. 现有 API 中声明的函数不断将新参数添加到其签名中,因此您必须不断升级,并且现有应用程序无法向后兼容。
  3. 现有 API 中的函数不断因非常相似的变体而过载,这可能导致难以选择要使用的相关函数。

为此,您可以:

  1. 将 API 分离为一系列头文件和库,以便您可以更轻松地控制实际需要的部分。任何内部依赖项都应该由供应商自动解决,这样用户就不必通过反复试验来找出依赖项,例如当我只想使用在 shozbot.h 头文件中声明的 API 中的函数时,我需要包含头文件 wibble.h。
  2. 通过在适用的情况下引入重载,使 API 升级向后兼容。但是您应该将重载的函数分组到类别中,例如如果将一组新的重载函数添加到现有 API(例如 our_api.h)以使其适应新技术(例如 SOA),那么除了现有的头文件our_api 之外,它们将在自己的头文件our_api_soa.h 中单独提供。 h.

HTH

【讨论】:

    【解决方案2】:

    考虑一种 OO 语言,其中 所有 方法都定义在 Object 中,即使它们只对某些子类有意义。那将是最极端的例子。

    【讨论】:

      【解决方案3】:

      大多数 Microsoft 产品?

      界面膨胀导致屏幕上同时出现过多的元素,尤其是很少使用的元素,或者它们的功能令人困惑。描述接口膨胀的一种更简单的方法可能是查看没有它的东西,试试 37signals 中的Basecamp。标题中只有几个选项卡和几个链接。

      可以通过可折叠的窗格(例如,使用 Javascript)或在需要时隐藏不常用选项的向下钻取菜单来解决界面膨胀问题。

      【讨论】:

      • @Felix 我不同意 Ribbon。因为 Office 有很多选项,所以需要有一种方法可以快速找到它们,而不会提供太多让用户不知所措的信息。 Ribbon 在这方面做得很好。比如现在做上标,我不需要点击7次——我只需要点击一次。
      • @Felix:功能区的设计目的是消除 Office 中工具栏和菜单过多导致的界面臃肿。我认为它已经成功了。
      • 我同意您可以“更快”地采取行动。但尽管如此,有时很难在众多按钮中找到一个按钮。也许新用户比习惯旧界面的用户更容易。如果我将它与 iWork 进行比较,我会觉得它更舒服,因为只有那些在特定上下文中合理的按钮才会显示出来。好吧,我必须承认,我的评论是主观的,但我知道我不是唯一一个遇到麻烦的人;)
      【解决方案4】:

      界面膨胀是逐渐添加的元素,将原本简单、优雅的界面变成一个到处都是按钮、菜单、选项等的元素,破坏了应用程序原有的凝聚力。我想到的一个例子是 iTunes。在它的早期版本中,它非常简单,但随着时间的推移,添加了很多可能被认为是臃肿的功能(iTunes DJ、Coverflow、Genius)。

      【讨论】:

        【解决方案5】:

        界面膨胀有时是因为试图让所有功能都单击一下就可以了,就像这个幽默的例子:

        Too many toolbar buttons

        (虽然很有趣,但这个例子对 Firefox 来说并不公平,因为在这个例子中用户添加了所有这些工具栏)

        一种称为“渐进式披露”的 UI 设计技术是减少界面臃肿的一种方法。仅将最常用的功能公开为顶级点击。如果您有不常用的功能,但仍然足够有价值,可以包含在您的应用程序中,请以合乎逻辑的方式对它们进行分组,例如在下拉菜单或其他导航元素后面。

        【讨论】:

          【解决方案6】:
          【解决方案7】:

          大多数 C++ 程序员都熟悉的接口膨胀的极端例子是std::basic_string。成员函数的翻页和翻页只有很小的变化,这些函数中的大多数不必是成员函数,而可以是字符串实用程序库中的免费函数。

          【讨论】:

          猜你喜欢
          • 2014-07-04
          • 1970-01-01
          • 1970-01-01
          • 2021-07-25
          • 1970-01-01
          • 1970-01-01
          • 2012-05-06
          • 1970-01-01
          • 2019-01-06
          相关资源
          最近更新 更多