作文,您如何知道何时停止?

| 关闭。这个问题是基于意见的。它当前不接受答案。
已邀请:
我认为您的问题可能是您正在尝试遵循“古老的明智说法”。您可能比任何通用准则都更了解应用程序的要求。 一旦您积累了一些构建应用程序的经验,就应该对做事有一种自然的感觉。指南仅仅是为了帮助您理解一个概念。它们本身不是规则。
“价值构成胜过继承”是一句古老的谚语,直到今天仍然有效。 组合和继承旨在增加可重用性并减少重复代码。继承还有其他好处。 组合意味着如果您拥有属于2个或多个类层次结构的泛型方法,请将其分离为新类,并让类层次结构将此新类作为组合的一部分。这样,您就不会触及类层次结构,您将获得可重用代码的好处。
class Aves { ... }
class Hawk: Aves { ... }

class Mammal { ... }
class Bat: Mammal { ... }
在上面的示例中,所有Aves(飞鸟)Fly()((像Penguin或Dodo这样的不飞鸟仍然可以实现fly()而没有飞蝇)。 但是作为哺乳动物的蝙蝠也可以飞() 现在,您可以将Fly()作为一个单独的类拉出,并且倾向于继承而不是继承(包括Aves中的Fly())
class FlyBehavior 
{
public void Fly() { ... }
}
例如,FlyBehavior可以是具有ShortFlightBehavior和LongFlightBehavior的类层次结构。 希望我不要再让您感到困惑了:)
什么时候停止?完全停止专注于构图。如果您专注于其他规则,它将自然而然地出现。 专注于“ is-a \”和SRP以获得适当的继承。 检查SRP中类的最简单方法是尝试将每个方法名称与类名称相关联。
class Vehicle
{
    private void WriteLog(string message) {}
    public void Start();
}
WriteLog
方法不能真正与
Vehicle
相关联。对其进行分解,然后通过构造函数接受它(组成和依赖注入)。
听起来您正在将启发式智慧变为绝对。它不是在告诉您“从不”使用继承。如果您处于继承或组合都可以很好地工作的情况下,请使用组合。简单。

要回复问题请先登录注册