C# 具有许多属性的大型类,但如果我只需要一个或两个属性呢?

C# 具有许多属性的大型类,但如果我只需要一个或两个属性呢?,c#,C#,我正在修改一个应用程序以提高性能。该应用程序有一个具有许多属性的类。通常,此类由从数据库中提取大型查询的主键整体填充。应用程序在很大程度上是缓慢的,因为这种情况在整个过程中不断发生,即使在大多数情况下,在给定的代码段中只需要类中的一个或两个属性。现有的大型类只有一个默认构造函数,其所有属性都可以为null或具有默认值。在下面的代码中,忽略缺少构造函数以及如何填充这些对象 public class Contract { public enum ContractStatus {

我正在修改一个应用程序以提高性能。该应用程序有一个具有许多属性的类。通常,此类由从数据库中提取大型查询的主键整体填充。应用程序在很大程度上是缓慢的,因为这种情况在整个过程中不断发生,即使在大多数情况下,在给定的代码段中只需要类中的一个或两个属性。现有的大型类只有一个默认构造函数,其所有属性都可以为null或具有默认值。在下面的代码中,忽略缺少构造函数以及如何填充这些对象

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类。感谢您的健康检查。我想你是对的,我要开始谈正事,把事情做好,谢谢:)