我理解实心应该完成什么,并在模块化很重要且目标明显有用的情况下定期使用它。然而,有两件事阻止我在我的代码库中一致地应用它:
另一方面,这种心态往往导致上帝成为对象。我通常会保守地重构这些元素,只有当我看到清晰的模式出现时,才会添加清晰的抽象行。如果你不需要更多的模块化,没有明显的重复,并且代码是可读的,那么上帝对象和紧密耦合的代码有什么问题呢?
编辑:就单个坚实的原则而言,我想强调的是,Liskov替换是IMHO,是常识的形式化,应该在任何地方应用,因为抽象没有任何意义。此外,每个类在某种抽象级别上都应该有一个单独的责任,尽管它可能是一个很高的级别,所有的实现细节都被塞进一个庞大的2000行类中。基本上,你的抽象应该是有意义的,在你选择抽象的地方。在模块化不明显有用的情况下,我质疑的原则是开放的、封闭的、接口隔离的,尤其是依赖反转,因为这些原则都是关于模块化的,而不仅仅是抽象。
发布于 2011-04-06 19:06:33
以下是您可以应用于帮助您理解如何平衡系统设计的简单原则:
S
。在方法的数量或数据量方面,您可以有一个非常大的对象,并且仍然坚持这一原则。例如,Ruby String对象。这个对象有更多的方法,而不是摇动一根棍子,但它仍然只有一个责任:为应用程序保存一串文本。一旦你的目标开始承担新的责任,就开始认真考虑这个问题。维护问题是问自己:“如果以后遇到问题,我会在哪里找到这段代码?”在本质上,你是在尽你所能,在维护软件的时候,不要把自己打在脚上。如果您的大型对象是合理的抽象,那么就没有什么理由将它们分开,因为有人提出了一个度量,说明类不应该超过X行/方法/属性/等等。如果有的话,这些都是指南,而不是硬而快速的规则。
发布于 2011-04-06 18:43:02
我认为大多数情况下你已经回答了你自己的问题。当概念需要提升抽象级别时,关于如何重构您的代码的指导原则集是坚实的。
就像所有其他创造性的学科一样,没有绝对的东西--只有权衡。你做的越多,就越容易决定什么时候对你当前的问题域或需求足够了。
尽管如此--抽象是软件开发的核心--所以如果没有什么好的理由不去做,那么实践将使您在这方面做得更好,并且您会对权衡有一种直觉的感觉。所以,除非它变得有害,否则你应该支持它。
发布于 2011-04-06 19:53:24
I want to avoid premature abstraction.In my experience drawing abstraction lines without concrete use cases...
这部分是对的,一部分是错的。
这并不是阻止人们应用面向对象原则/坚实的理由。它只会防止过早地应用它们。
这是..。
正确的
不要重构代码,直到它是可重构的;当它是需求完成。或者,当“用例”如您所说的全部存在时。
I find simple, tightly coupled procedural or God object code is sometimes easier to understand than very well-factored...
独自工作或在筒仓工作时
不做OO的问题并不是显而易见的。在编写程序的第一个版本之后:
代码是新的,在你的头脑中,代码是熟悉的,代码很容易在心理上划分,你写的代码
这些美好事物的3/4在短时间内很快就会消失。
最后,您认识到您有上帝对象(具有许多功能的对象),因此您可以识别单个函数。封装。把它们放在文件夹里。偶尔使用接口。帮你自己做一个长期维护的忙。尤其是非重构的方法往往会无限膨胀,成为上帝的方法。
一队
不做OO的问题立刻就被注意到了。好的OO代码至少具有一定的自文档性和可读性。特别是当与良好的绿色代码相结合时。此外,由于缺乏结构,很难将任务分开和集成变得更加复杂。
https://softwareengineering.stackexchange.com/questions/65690
复制相似问题