【问题标题】:Pros and Cons of "kitchen sink" classes in C#C# 中“厨房水槽”类的优缺点
【发布时间】:2012-05-22 19:16:34
【问题描述】:

在单个 C# 类中包含大量变量、属性和/或方法是否会导致明显的性能损失?

我有几个类(棋盘、走法生成器和 PGN 解析器),总共大约 1,200 行代码。移动生成器和解析器都与棋盘类紧密耦合,很容易将所有三个类简单地组合成一个大型“厨房水槽”类。

我理解并赞赏让每个类都专注于单一任务并干净地封装其内部设计的概念,但由于使用 .NET 是一项不可协商的要求,我也愿意牺牲“设计的纯粹性”业绩回报

除了明显的可读性/可维护性问题之外,与大量较小的简单类相比,拥有较少数量的大型复杂类有什么缺点?

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

【问题讨论】:

  • 可维护性和可读性还不够?与以往一样,从编写最清晰的代码开始 - 重构它以使其更清晰 - 然后在你测量它并确定它是否足够好之后担心性能。跨度>
  • 为什么使用 .NET 会让你认为应该牺牲好的设计?
  • 确实与 C# 无关,本质上,在大多数 OO 编程语言中也是如此。如果您的三个类耦合太强,也许与其尝试将它们结合起来,不如找到一种更好的方法来解耦它们。
  • "...由于使用 .NET 是一项不可协商的要求,我也愿意牺牲“设计的纯粹性”以换取性能。”您似乎认为 .NET 会带来糟糕的性能,这可以说是错误的。您最好了解和接受平台的功能并很好地使用它。

标签: c#


【解决方案1】:

在单个 C# 类中包含大量变量、属性和/或方法是否会导致明显的性能损失?

拥有更多变量会导致实例具有更高的内存使用率和可能更长的构建时间 - 如果在每种情况下都不一定需要变量,这可能会产生不利影响。

话虽如此,主要缺点更多是在可靠性、可维护性和可测试性方面。

我理解并赞赏让每个类都专注于单一任务并干净地封装其内部设计的概念,但由于使用 .NET 是一项不可协商的要求,我也愿意牺牲“设计的纯粹性”业绩回报

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

我有几个类(棋盘、走法生成器和 PGN 解析器),总共大约 1,200 行代码。移动生成器和解析器都与棋盘类紧密耦合,很容易将所有三个类简单地组合成一个大型“厨房水槽”类。

我会考虑尝试找到重构它并将其解耦为更多、更小的类的动机。这可能会在各个方面都有帮助,包括性能(如果您认为有必要),因为在干净、经过深思熟虑的设计中解决性能问题通常比在紧密的设计中查找或解决性能问题更简单耦合,大型代码库。较小的类更容易分析和测量,这反过来可以比处理大量代码更简单地发现和纠正真正的性能问题(如果有的话)。

【讨论】:

  • “优秀的设计...实现起来相当简单” 嗯,“简单”可能对很多人来说是一种推动力,但它绝对是可能的。不过我想说大多数人需要在这方面做一些工作。
  • @Servy True - 但 .NET 并没有让它变得更难 - 我认为它在 .NET 中比许多其他框架更简单,因为存在许多必需的工具和核心类你已经。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 2015-06-28
  • 2021-04-05
  • 2020-02-24
相关资源
最近更新 更多