首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实心与避免过早抽象化

实心与避免过早抽象化
EN

Software Engineering用户
提问于 2011-04-06 18:16:07
回答 12查看 4.9K关注 0票数 34

我理解实心应该完成什么,并在模块化很重要且目标明显有用的情况下定期使用它。然而,有两件事阻止我在我的代码库中一致地应用它:

  • 我想避免过早的抽象化。根据我的经验,在没有具体用例的情况下绘制抽象线(现在或可预见的将来存在的那种用例)会导致在错误的地方绘制它们。当我试图修改这样的代码时,抽象行会阻碍我,而不是帮助你。因此,我倾向于错误地不绘制任何抽象线,直到我很好地知道它们在哪里是有用的。
  • 如果它使我的代码更冗长、更难理解等等,并且没有消除任何重复,我发现很难为增加模块化本身辩护。我发现简单的、紧密耦合的过程代码或上帝对象代码有时比很好的考虑因素的ravioli代码更容易理解,因为流程是简单和线性的。写起来也容易得多。

另一方面,这种心态往往导致上帝成为对象。我通常会保守地重构这些元素,只有当我看到清晰的模式出现时,才会添加清晰的抽象行。如果你不需要更多的模块化,没有明显的重复,并且代码是可读的,那么上帝对象和紧密耦合的代码有什么问题呢?

编辑:就单个坚实的原则而言,我想强调的是,Liskov替换是IMHO,是常识的形式化,应该在任何地方应用,因为抽象没有任何意义。此外,每个类在某种抽象级别上都应该有一个单独的责任,尽管它可能是一个很高的级别,所有的实现细节都被塞进一个庞大的2000行类中。基本上,你的抽象应该是有意义的,在你选择抽象的地方。在模块化不明显有用的情况下,我质疑的原则是开放的、封闭的、接口隔离的,尤其是依赖反转,因为这些原则都是关于模块化的,而不仅仅是抽象。

EN

回答 12

Software Engineering用户

发布于 2011-04-06 19:06:33

以下是您可以应用于帮助您理解如何平衡系统设计的简单原则:

  • 单一责任原则:固体中的S。在方法的数量或数据量方面,您可以有一个非常大的对象,并且仍然坚持这一原则。例如,Ruby String对象。这个对象有更多的方法,而不是摇动一根棍子,但它仍然只有一个责任:为应用程序保存一串文本。一旦你的目标开始承担新的责任,就开始认真考虑这个问题。维护问题是问自己:“如果以后遇到问题,我会在哪里找到这段代码?”
  • 简单是很重要的:阿尔伯特·爱因斯坦说:“让一切尽可能简单,而不是简单。”你真的需要那个新方法吗?你能用现有的功能完成你需要的东西吗?如果你真的认为需要一个新的方法,你能改变一个现有的方法来满足你所有的需求吗?本质上,当你构建新的东西时,重构。

在本质上,你是在尽你所能,在维护软件的时候,不要把自己打在脚上。如果您的大型对象是合理的抽象,那么就没有什么理由将它们分开,因为有人提出了一个度量,说明类不应该超过X行/方法/属性/等等。如果有的话,这些都是指南,而不是硬而快速的规则。

票数 9
EN

Software Engineering用户

发布于 2011-04-06 18:43:02

我认为大多数情况下你已经回答了你自己的问题。当概念需要提升抽象级别时,关于如何重构您的代码的指导原则集是坚实的。

就像所有其他创造性的学科一样,没有绝对的东西--只有权衡。你做的越多,就越容易决定什么时候对你当前的问题域或需求足够了。

尽管如此--抽象是软件开发的核心--所以如果没有什么好的理由不去做,那么实践将使您在这方面做得更好,并且您会对权衡有一种直觉的感觉。所以,除非它变得有害,否则你应该支持它。

票数 5
EN

Software Engineering用户

发布于 2011-04-06 19:53:24

代码语言:javascript
运行
复制
I want to avoid premature abstraction.In my experience drawing abstraction lines without concrete use cases... 

这部分是对的,一部分是错的。

错误

这并不是阻止人们应用面向对象原则/坚实的理由。它只会防止过早地应用它们。

这是..。

正确的

不要重构代码,直到它是可重构的;当它是需求完成。或者,当“用例”如您所说的全部存在时。

代码语言:javascript
运行
复制
I find simple, tightly coupled procedural or God object code is sometimes easier to understand than very well-factored...

独自工作或在筒仓工作时

不做OO的问题并不是显而易见的。在编写程序的第一个版本之后:

代码是新的,在你的头脑中,代码是熟悉的,代码很容易在心理上划分,你写的代码

这些美好事物的3/4在短时间内很快就会消失。

最后,您认识到您有上帝对象(具有许多功能的对象),因此您可以识别单个函数。封装。把它们放在文件夹里。偶尔使用接口。帮你自己做一个长期维护的忙。尤其是非重构的方法往往会无限膨胀,成为上帝的方法。

一队

不做OO的问题立刻就被注意到了。好的OO代码至少具有一定的自文档性和可读性。特别是当与良好的绿色代码相结合时。此外,由于缺乏结构,很难将任务分开和集成变得更加复杂。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/65690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档