有人可以向我解释 OOP 中的接口膨胀是什么(最好有一个例子)。
7 回答
天,
假设您的意思是 API 而不是 GUI,对我来说 I/F 膨胀可能以多种方式发生。
- API 只是不断扩展和扩展新功能而没有任何形式的隔离,因此您最终会得到一个难以使用的单一头文件。
- 现有 API 中声明的函数不断将新参数添加到其签名中,因此您必须不断升级,并且现有应用程序不能向后兼容。
- 现有 API 中的函数不断因非常相似的变体而过载,这可能导致难以选择要使用的相关函数。
为了帮助解决这个问题,您可以:
- 将 API 分离为一系列头文件和库,以便您可以更轻松地控制实际需要的部分。任何内部依赖项都应由供应商自动解决,因此用户不必通过反复试验找出依赖项,例如,当我只想使用声明的 API 中的函数时,我需要包含头文件 wibble.h在 shozbot.h 头文件中。
- 通过在适用的情况下引入重载,使 API 升级向后兼容。但是您应该将重载函数分组到类别中,例如,如果将一组新的重载函数添加到现有 API(例如 our_api.h)以使其适应新技术(例如 SOA),那么它们将在自己的头文件中单独提供our_api_soa.h 除了现有的头文件our_api.h。
高温高压
考虑一种 OO 语言,其中所有方法都在 Object 中定义,即使它们仅对某些子类有意义。那将是最极端的例子。
大多数微软产品?
界面臃肿导致屏幕上同时出现太多内容,尤其是很少使用或功能混乱的元素。描述接口膨胀的一种更简单的方法可能是查看没有它的东西,试试37signals 的Basecamp。标题中只有几个选项卡和几个链接。
界面膨胀可以通过可折叠的窗格(例如使用 Javascript)或隐藏不常用选项直到需要它们的向下钻取菜单来解决。
界面臃肿是逐渐添加的元素,将原本可能是简单、优雅的界面变成一个到处都是按钮、菜单、选项等的元素,破坏了应用程序原有的凝聚力。我想到的一个例子是 iTunes。在它的早期版本中,它非常简单,但随着时间的推移,添加了很多可能被认为是臃肿的功能(iTunes DJ、Coverflow、Genius)。
界面膨胀有时是由于试图让每个功能都单击一下而导致的,就像在这个幽默的例子中一样:
(虽然很有趣,但这个例子对 Firefox 不公平,因为在这个例子中用户添加了所有这些工具栏)
一种称为“渐进式披露”的 UI 设计技术是减少界面臃肿的一种方法。仅将最常用的功能公开为顶级点击。如果您有不常用的功能,但仍然足够有价值,可以包含在您的应用程序中,请以合乎逻辑的方式对它们进行分组,例如在下拉菜单或其他导航元素后面。
大多数 C++ 程序员都会熟悉的一个极端的接口膨胀示例是std::basic_string
. 成员函数的翻页和翻页只有很小的变化,这些函数中的大多数不必是成员函数,而可以是字符串实用程序库中的免费函数。