C# 使用嵌套的派生类进行设计不好吗

C# 使用嵌套的派生类进行设计不好吗,c#,design-patterns,C#,Design Patterns,我读了一些其他程序员写的代码,他为应用程序做了一些设计,应用程序类彼此派生如下: public interface IABase { } class BBase : IABase { } class CDesktop : BBase { } class Report : CDesktop { } class Sample : Report { } 这种设计是反模式的吗?首先,我得说,很难理解类和应用程序逻辑的关系,这是我的2美分。你还能说些什么呢?有一点普遍的建议,建议你更喜欢

我读了一些其他程序员写的代码,他为应用程序做了一些设计,应用程序类彼此派生如下:

public interface IABase
{

}
class BBase : IABase
{

}

class CDesktop : BBase
{

}

class Report : CDesktop
{

}

class Sample : Report
{

}

这种设计是反模式的吗?首先,我得说,很难理解类和应用程序逻辑的关系,这是我的2美分。你还能说些什么呢?

有一点普遍的建议,建议你更喜欢组合而不是继承。经常吹捧的优点是它更灵活,并且更不鼓励紧密耦合。(关于这一问题的讨论,请参见、等)

特别是对于C#,值得注意的是,组合可能需要大量的样板文件——毕竟,如果您想公开组件/基类的大部分功能,那么您需要手动公开它;相比之下,继承使得只公开所有内容变得非常容易

在有疑问的时候尽量少用继承可能是一个好主意,否则很容易创建很多紧密耦合的斯帕盖蒂怪物。但在某些情况下,经典的动态调度和所需要的一切;还有一些情况下,即使你的概念更好地映射到has-a关系而不是is-a关系,但冗长的构图是一个相当大的负担


因此,虽然这种代码很难维护,但有时还是值得的。您的具体示例看起来层次结构太深了;但是,旧代码增长一些疣通常是正常的——如果这是最坏的,请考虑自己是幸运的。

简短的答案是“它取决于”。这可能值得注意的是,如果你使用继承,因为API太大而不能手动传递,那么,这个API可能太大了。这并不总是有帮助的,不幸的是,在这方面,.NET库本身是一个不好的例子,但一般来说,一个小的公共表面区域使所有事情都变得容易。