C# OO设计-减少一长串方法

C# OO设计-减少一长串方法,c#,database,design-patterns,C#,Database,Design Patterns,我有一个简单的应用程序,可以将数据从XML文件加载到数据库 public class EmployeeLoader() { public void LoadEmpoyees() {...} public void LoadSalaries() {...} public void LoadRegistrationData() {...} public void LoadTaxData() {...} } 有多个“加载”方法是一个

我有一个简单的应用程序,可以将数据从XML文件加载到数据库

public class EmployeeLoader()  
{ 
   public void LoadEmpoyees()
   {...}

   public void LoadSalaries()
   {...}

   public void LoadRegistrationData()
   {...}    

   public void LoadTaxData()
   {...}
}
有多个“加载”方法是一个好主意吗?因为这看起来像是一种代码味道,就像我对tweney加载方法的描述一样?如果是,如何使代码更具可读性?

每个加载方法都通过存储库将数据加载到数据库中相应的表中?

实际上,将其分解为这样命名的步骤是非常可读的


请参阅本文:

一个名为“Load()”的用户暴露点如何?此方法可以在其中包含一个枚举参数,指示他们要加载的内容,然后,在封面下,您可以根据需要/想要实现这个外部公开调用,使用尽可能多/很少的方法。

最大的问题是这些方法是否都必须公开。理想情况下,您需要一个类似于单个public
Load
方法的方法,该方法通过调用所有私有Load*方法来加载数据库中的所有内容。

将它们分开可以使其比具有大量样板文件的加载方法更具可读性,以管理不同的场景

你会有类似于

public void Load() {
  if (condition1 that makes me know I'm loading an employee) {
    //whatever applies to this condition
  }
  if (condition2 that makes me know I'm loading salaries) {
    //whatever applies to this condition
  }
  if (condition3 that makes me know I'm loading registrationData) {
    //whatever applies to this condition
  }
  if (condition4 that makes me know I'm loading taxData) {
    //whatever applies to this condition
  }
}

即使这些方法做了非常相似的事情,分离它们并调用类似的方法可能是个好主意。这样,如果某些内容发生了更改,那么将很容易进行重构=)


最后,如果类太大(太多的责任),你可以考虑分解更多的类,有更具体的职责。

< P>我假设加载的数据将被保存在局部字段/字典中,然后用另一种方法使用。 如果是这种情况,您可以根据需要延迟加载这些值

public class EmployeeLoader
{

    private List<String> _Employees = null;
    public List<String> Employees
    {
        get
        {
            if (_Employees == null)
            {
                LoadEmployees();
            }
            return _Employees;
        }
    }

    private void LoadEmployees()
    {
        //Load Data
    }
}
公共类EmployeeLoader
{
私有列表_Employees=null;
公开名单雇员
{
得到
{
如果(_Employees==null)
{
LoadEmployees();
}
返回(u)员工;;
}
}
私人雇员()
{
//加载数据
}
}

作为补充,您仍然可以使用一个Load()方法强制将值加载到这些支持字段中。

根据实现的不同,您可以将它们压缩为一个加载方法,或者至少更少的加载方法。它可以成为一个或几个Load(X)方法,而不是许多LoadX()方法吗?例:

public class EmployeeLoader()  
{ 
   public void Load(string pTableName)
   {...}
}

如果代码的目的是将数据从XML加载到数据库中,那么就没有什么大问题。但我必须问一件事——是否有其他应用程序使用相同的实体?如果是这样,为什么不使用它的DAL来适当地访问数据库或XML文件呢?如果有其他应用程序同时访问这两个源,请使用其中每个源的DAL,并定义一个填充然后转储的实体类型。