什么是应用于软件的“过度设计”? [关闭]

问题描述 投票:26回答:19

我不知道将术语“过度设计”应用于软件开发是一个很好的定义。该表达式似乎经常在软件设计讨论中经常与“过分的面向未来”结合使用,并且可以确定更精确的定义。

terminology definition
19个回答
52
投票

[与大多数答案相反,我不认为“目前不需要的功能”过度设计;或问题最少的形式。

[就像你说过的那样,最糟糕的过度工程通常是以面向未来和可扩展性的名义犯下的,而恰恰相反:]

  • 空的抽象层充其量是不必要的,最糟糕的是将您限制在底层API的狭窄,低效的使用中。
  • 带有指定“扩展点”的代码,例如通过抽象工厂获取的受保护的方法或组件-事实证明,当您必须扩展功能时,这些都不完全是您真正需要的。
  • 将所有内容配置为“避免硬编码”,结果是配置文件中的应用程序逻辑比源代码中的(复杂的,容易出错的)应用程序逻辑更多。
  • 过度泛化:开发人员构建了一个(技术上有趣的)“业务规则引擎”,以“执行”业务用户自己提供的规范,而不是实施(技术上不感兴趣的)功能规范。最终结果是一种专有(脚本或特定于域)语言的解释器,该语言通常经过严格设计,不提供任何工具支持,并且难以使用,以至于没有业务用户可以使用它。
  • 事实是,最容易适应新的和不断变化的需求(因此是最有前途和可扩展性的设计是尽可能简单的设计。


0
投票
我认为您的问题的最佳答案可以在this other qestion中找到

0
投票
我的粗略定义是“提供不需要满足要求规范的功能”

0
投票
我认为它们与Gold plating相同,并被Golden hammer击中:)

0
投票
Quoting from here:“ ...在

实际上


0
投票
过度设计与创建可扩展应用程序之间存在很大差异,可以随需求变化而升级。如果我能想到一个示例,我将编辑该帖子。

0
投票
当然,您可能在特定项目之外有需求-例如,如果您打算将来进行类似的应用程序,那么您可能会对附加于可扩展性的附加需求,这取决于成本,并添加到项目特定需求中。 >

0
投票

0
投票
[当您的设计实际上使事情变得更复杂而不是简化事情时,您就过度了工程。

0
投票
[有趣的是,我的老板告诉我,我过度设计了我们计划进行辅导的新软件产品(目标市场HR人员)。所以我来这里是为了查询这个词。

他们想获得一些东西来立即出售,重新利用现有工具。我忍不住坐下来想一想,如果没有我们所谈论的某些灵活性,那么注册次数会减少,保留率会降低。主要是具有猴子可以使用的高度可视化的UI。


-1
投票

25
投票

与普遍的看法相反,过度工程实际上是当工程师感到疲倦并认为他们理解用户时出现的现象。


20
投票

在我们考虑过过度设计的情况下,通常会描述设计得如此通用的软件,以至于忽视了最初设计要执行的主要任务,因此不仅变得困难使用,但从根本上来说并不明智。


14
投票

对我来说,过度工程包括您不需要的任何东西,并且您不需要[[知道


8
投票
Joel on Software开头的讨论是,

8
投票
这个问题的敏捷答案是:每一段不有助于所请求功能的代码。

3
投票
如果您花太多时间思考问题的可能后果,而最终干扰了问题本身的解决,那么您可能会过度设计。

2
投票
恐怕不可能精确定义,因为它高度依赖于上下文。例如,过度设计显示闪闪发光的小马的网站要比设计核电站控制系统容易得多。冗余,过多的错误检查,功能强大的日志记录设施对于一个闪闪发光的小马应用程序都进行了过度设计,但对于核电站控制系统却没有。我认为您能做的最好的事情就是为应用程序的目的而在功能上施加过多开销。

请注意,我要区分镀金和过度设计。在我看来,镀金可以创造出人们所不需要且永远不会使用的功能。过度设计更多地是关于通过在代码周围编写检查代码或对简单任务使用过多设计来为应用程序构建多少“安全性”。


1
投票
对我来说,任何会使代码增加脂肪的事情。 Meat是可以按照规范完成工作的任何代码,fat是可以以增加更多复杂性的方式膨胀代码的任何代码。程序员可能一直在期待功能的未来扩展。但仍然很胖。
© www.soinside.com 2019 - 2024. All rights reserved.