C# 具有许多属性的大型类,但如果我只需要一个或两个属性呢?
我正在修改一个应用程序以提高性能。该应用程序有一个具有许多属性的类。通常,此类由从数据库中提取大型查询的主键整体填充。应用程序在很大程度上是缓慢的,因为这种情况在整个过程中不断发生,即使在大多数情况下,在给定的代码段中只需要类中的一个或两个属性。现有的大型类只有一个默认构造函数,其所有属性都可以为null或具有默认值。在下面的代码中,忽略缺少构造函数以及如何填充这些对象C# 具有许多属性的大型类,但如果我只需要一个或两个属性呢?,c#,C#,我正在修改一个应用程序以提高性能。该应用程序有一个具有许多属性的类。通常,此类由从数据库中提取大型查询的主键整体填充。应用程序在很大程度上是缓慢的,因为这种情况在整个过程中不断发生,即使在大多数情况下,在给定的代码段中只需要类中的一个或两个属性。现有的大型类只有一个默认构造函数,其所有属性都可以为null或具有默认值。在下面的代码中,忽略缺少构造函数以及如何填充这些对象 public class Contract { public enum ContractStatus {
public class Contract
{
public enum ContractStatus
{
Draft, Active, Inactive
}
private Int32 contractId = DALC.DefaultInt32;
private String name = DALC.DefaultString;
private ContractStatus status;
private ContractType contractType = null;
private CurrencyType currencyType = null;
private Company company = null;
}
正如您所看到的,它有自己的属性,并且还引用其他类(例如ContractType、Company)
根据常见的设计模式,我想到了几种方法:
1) 重新考虑这一点,并将这些较小的子部分分解为具有自己属性的类。然后在需要的时候,用所有较小的类来重建这个大类。这将是相当困难的,尽管它听起来很理想,并且符合坚实的OOD原则
2) 创建只包含大型类的新类,但只公开其一个或两个属性。我仍在创建原始大型类的完整版本,但我将只填充所需的数据。这将通过简单的DB查询实现,因此类的大部分将未使用,并且它引用的空默认类将永远不会被构造
public class ContractName
{
Contract contract;
public ContractName()
{
contract = new Contract();
}
public String Name
{
get { return contract.Name; }
set { contract.Name = value; }
}
}
3) 向现有的大型类添加新的构造函数,并使用一个参数指示我想要实际填充的代码块。这听起来很混乱,有点令人讨厌,也有点错误,如果合同是由一段代码中的合同ID创建的,那么它的信息与其他地方的合同ID创建的信息不同
谢谢你的建议 我建议选项1:提取您认为现在需要提取的类。其他两个选项只是增加了更多,这将在未来花费更长的时间来解决。经过良好分解的代码通常比大型复杂类更容易优化
根据我的经验,分班并不那么费力。事实上,我经常会惊讶地发现,只要我遵循这个方法,我就能以如此快的速度执行像Extract类这样的重构。我想知道它到底会对性能有什么帮助。您是否设法确定这是应用程序的真正瓶颈?您应该修改DB查询以仅提取必要的数据。你可能不需要改变你的类来做到这一点。你的第二种方法实际上是最常见的外观。对于Id和名称的合同类来说,这可能是一个更好的问题。然后是其他属性的ContractDetail类。感谢您的健康检查。我想你是对的,我要开始谈正事,把事情做好,谢谢:)