C# C语言中“厨房水槽”类的优缺点

C# C语言中“厨房水槽”类的优缺点,c#,C#,在一个C类中有大量的变量、属性和/或方法,是否会造成明显的性能损失 我有几个类:棋盘、移动生成器和PGN解析器,总共大约1200行代码。move generator和解析器都与board类紧密耦合,很容易将这三个类合并成一个大的kitchen sink类 我理解并赞同让每个类专注于单个任务并干净地封装其内部设计的概念,但由于使用.NET是一项不可协商的要求,我也愿意牺牲设计的纯洁性来换取性能 除了可读性/可维护性这一显而易见的问题外,与大量较小的简单类相比,拥有较少数量的大型复杂类有哪些不利之处

在一个C类中有大量的变量、属性和/或方法,是否会造成明显的性能损失

我有几个类:棋盘、移动生成器和PGN解析器,总共大约1200行代码。move generator和解析器都与board类紧密耦合,很容易将这三个类合并成一个大的kitchen sink类

我理解并赞同让每个类专注于单个任务并干净地封装其内部设计的概念,但由于使用.NET是一项不可协商的要求,我也愿意牺牲设计的纯洁性来换取性能

除了可读性/可维护性这一显而易见的问题外,与大量较小的简单类相比,拥有较少数量的大型复杂类有哪些不利之处

干杯! 卑微的程序员 ,,,,^…^

在一个C类中有大量的变量、属性和/或方法,是否会造成明显的性能损失

拥有更多的变量会导致实例具有更高的内存使用率和潜在的更长的构建时间——如果在每种情况下都不一定需要变量,那么这可能会带来损失

也就是说,主要缺点更多地体现在可靠性、可维护性和可测试性方面

我理解并赞同让每个类专注于单个任务并干净地封装其内部设计的概念,但由于使用.NET是一项不可协商的要求,我也愿意牺牲设计的纯洁性来换取性能

.NET与编写糟糕的代码无关-在同一个项目中,您可以使用良好的设计和.NET,事实上,这非常容易实现

我有几个类:棋盘、移动生成器和PGN解析器,总共大约1200行代码。move generator和解析器都与board类紧密耦合,很容易将这三个类合并成一个大的kitchen sink类


我会尝试去寻找重构的动机,并把它分解成更小的班级。这可能在各个方面都有帮助,包括性能(如果您觉得有必要的话),因为在干净、深思熟虑的设计中修复性能问题通常比在紧密耦合的大型代码库中查找或修复性能问题更简单。较小的类更容易分析和测量,这反过来允许发现和纠正真正的性能问题(如果有的话),这比在处理大量混乱的代码时要简单得多。

维护性和可读性还不够吗?和以往一样,从一开始就要编写最清晰的代码——对代码进行重构,使其更干净——然后在衡量并确定其是否足够好后再考虑性能。为什么使用.NET会让你认为应该牺牲好的设计?实际上,这与C本身无关,同样的答案在大多数OO编程语言中也是如此。如果您的三个类之间的耦合太强,也许更好的方法不是尝试将它们组合起来,而是找到将它们解耦的方法……因为使用.NET是一个不可协商的要求,我也愿意牺牲设计的纯洁性来换取性能。您似乎认为.NET会带来糟糕的性能,而这可能是错误的。你最好理解和接受平台的功能,并好好使用它。好的设计…很容易就能很好地完成,简单可能会推动很多人,但这是最有可能的。我想说,大多数人都需要做一些工作。@Servy-True-但.NET并没有让它变得更难-我认为它在.NET中比许多其他框架更简单,因为您已经有了这么多必需的工具和核心类。