面向对象设计 - 减少一长串方法

时间:2010-05-04 21:47:39

标签: c# database design-patterns

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

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

   public void LoadSalaries()
   {...}

   public void LoadRegistrationData()
   {...}    

   public void LoadTaxData()
   {...}
}

拥有多个“加载”方法是一个好主意,因为这看起来像我有关于tweney加载方法的代码味道?如果是这样,我如何使我的代码更具可读性? 每个Load方法都通过存储库将数据加载到数据库中的相应表中?

6 个答案:

答案 0 :(得分:3)

实际上,将它分解为这样命名良好的步骤是非常易读的。

请参阅此文章:http://www.codinghorror.com/blog/2008/07/coding-without-comments.html

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

你有类似

的东西
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
  }
}

呃。

即使这些方法做了非常类似的事情,分离它们并调用类似的方法也许是一个好主意。这样,如果有什么变化,那将是一个简单的重构=)。

最后,如果课程太大(职责太多),你可能会考虑进入更多具有更多具体职责的课程。

答案 3 :(得分:0)

对于一个名为“Load()”的用户的单个暴露点怎么样这个方法可以在其中使用一个枚举参数来指示他们想要加载的内容,然后在封面下你可以拥有你需要的多个/几个方法/想要实现这个外部暴露的呼叫。

答案 4 :(得分:0)

我假设加载的数据将保存在本地字段/字典中,然后由另一种方法使用。

如果是这种情况,您可以根据需要延迟加载值。

public class EmployeeLoader
{

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

    private void LoadEmployees()
    {
        //Load Data
    }
}

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

答案 5 :(得分:0)

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

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