我正在修改应用以提高性能。该应用程序有一个包含许多属性的类。通常,此类由一个主键填充,该主键从数据库中提取大型查询。应用程序在很大程度上是缓慢的,因为这在整个过程中不断发生,即使在给定的代码段中大多数时候只需要类中的两个属性。现有的大类只有一个默认构造函数,其所有属性都可以为空或具有默认值。在下面的代码中,忽略缺少构造函数以及如何填充这些对象。
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)重新考虑这个因素并将这些较小的子部分分解为具有自己属性的自己的类。然后在需要时用所有较小的类重构该大类。这将是相当费力的,尽管它听起来很理想并且符合SOLID OOD原则。
2)创建仅包含大类的新类,但只显示其中一个或两个属性。我仍在创建原始大型课程的完整版本,但我只会填充我需要的数据。这将通过简单的数据库查询,因此该类的大部分将在那里未使用,并且它的引用的空默认类不会被构造。
public class ContractName
{
Contract contract;
public ContractName()
{
contract = new Contract();
}
public String Name
{
get { return contract.Name; }
set { contract.Name = value; }
}
}
3)向现有的大类添加新的构造函数,其中的参数指示我想要实际填充的代码块。这听起来很麻烦,有点讨厌和错误,如果合同是由一个代码段中的合同ID创建的,它的信息与其他地方的合同ID创建的信息不同,那么我会留下这种情况。
感谢您的任何想法!
答案 0 :(得分:1)
我建议选项1:提取您认为需要提取的类 now 。其他两个选项只是添加更多technical debt,将来需要更长时间才能解决。精心设计的代码通常比大型复杂类更容易优化。
根据我的经验,分课并不是那么费力。事实上,只要我遵循配方,我通常会发现自己能够以多快的速度执行像Extract Class这样的重构。