2010-05-04 24 views
2

我有一個簡單的應用程序,它將數據從XML文件加載到數據庫。OO設計 - 減少方法的長列表

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

    public void LoadSalaries() 
    {...} 

    public void LoadRegistrationData() 
    {...}  

    public void LoadTaxData() 
    {...} 
} 

是否有多個「裝載」的方法,因爲這看起來像一個代碼味道,因爲我有關於tweney load方法是一個好主意?如果是這樣,我如何讓我的代碼更具可讀性?
每個Load方法通過存儲庫將數據加載到數據庫中的對應表中?

+0

如果您的代碼的目的是將數據從XML加載到數據庫中,那麼這裏沒有大問題。有一件事我不得不問 - 是否有另一個應用程序使用相同的實體?如果是這樣,爲什麼不使用它的DAL來根據需要命中數據庫或XML文件?如果有其他應用程序同時擊中兩個來源,請使用每個來源的DAL,然後定義您填充然後轉儲的實體類型。 – 2010-05-04 21:54:03

回答

0

如何,單次暴露點到用戶名爲「加載()」這種方法可能需要在它的一個枚舉參數,指示他們要加載的東西,然後在被窩裏你可以擁有您需要/希望實施此外部暴露呼叫的方法數量/方法數量。

3

最大的問題是這些方法是否都必須公開。理想情況下,您需要像單個公共Load方法那樣通過調用所有私有Load *方法加載數據庫中的所有內容。

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 
    } 
} 

唉。

即使這些方法做了非常類似的事情,將它們分開並調用類似的方法也許是一個好主意。這樣,如果有什麼改變,這將是一個簡單的重構=)。最後,如果班級變得太大(責任太多),你可能會考慮進入更多具有更多特定職責的班級。

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()方法強制將值加載到這些備份字段中。

0

根據實施情況,您可能可以將它們壓縮爲單個Load方法或至少更少的加載方法。而不是許多LoadX()方法,它可以成爲一個或幾個Load(X x)方法?例如:

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