什么是“过度工程”适用于软件? [英] What is "over-engineering" as applied to software?
问题描述
我不知道如何将过度工程一词应用于软件开发是一个好的定义。这个表达似乎在软件设计讨论中经常使用很多,与过度的未来打样结合使用,并且很好地确定一个更精确的定义。
I wonder what would be a good definition of term "over-engineering" as applied to software development. The expression seems to be used a lot during software design discussions often in conjunction with "excessive future-proofing" and it would be nice to nail down a more precise definition.
推荐答案
与大多数答案相反,我不认为目前不需要的功能是过度工程的;或者是最不成问题的形式。
Contrary to most answers, I do not believe that "presently unneeded functionality" is over-engineering; or it is the least problematic form.
像你说的那样,最糟糕的过度工程通常以未来打样和可扩展性的名义承诺 - 并实现了完全相反:
Like you said, the worst kind of over-engineering is usually committed in the name of future-proofing and extensibility - and achieves the exact opposite:
- 空白层次的抽象最多是不必要的,最糟糕的是限制您对基础API的一种狭隘,低效的使用。
- 带有指定扩展点的代码,例如通过抽象工厂获取的受保护方法或组件 - 当您必须扩展功能时,这些都不完全是您实际需要的
- 使所有配置都可以配置为避免硬编码,从而使配置文件中的应用程序逻辑(复杂,容易出错)比源代码更复杂。
- 过度泛化:开发人员不是实现(技术上无趣的)功能规范,而是构建(技术上有趣的)业务规则引擎,执行规范本身由业务用户提供。最终的结果是一个专有(脚本或域特定)语言的翻译器,通常是非常设计的,没有工具支持,并且很难使用,没有商业用户可以使用它。
事实是,最容易适应新的和不断变化的要求(因此是最具前瞻性和可扩展性)的设计是设计为简单。
The truth is that the design that is most easily adapted to new and changing requirements (and is thus the most future-proof and extensible) is the design that is as simple as possible.
这篇关于什么是“过度工程”适用于软件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!