2010-05-04 4 views
2

XML 파일의 데이터를 데이터베이스로로드하는 간단한 애플리케이션이 있습니다.OO 디자인 - 긴 메소드 목록 축소

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

    public void LoadSalaries() 
    {...} 

    public void LoadRegistrationData() 
    {...}  

    public void LoadTaxData() 
    {...} 
} 

는 내가 가지고있는이 tweney로드 방법에 대한 코드 냄새처럼 보이는 다수의 "로드"방법이 좋은 생각인가? 그렇다면 코드를 더 읽기 쉽게하려면 어떻게해야합니까?
각 Load 메서드는 리포지토리를 통해 데이터베이스의 해당 테이블에 데이터를로드합니다.

+0

코드의 목적이 XML에서 데이터베이스로 데이터를로드하는 것이라면 큰 문제는 없습니다. 내가 물어야 할 한 가지 - 동일한 엔티티를 사용하는 다른 애플리케이션이 있습니까? 그렇다면 DAL을 사용하여 데이터베이스 또는 XML 파일을 적절하게 히트하지 않는 이유는 무엇입니까? 두 소스에 모두 충돌하는 다른 앱이있는 경우 각각의 DAL을 사용하고 채우고 덤프하는 엔티티 유형을 정의하십시오. –

답변

3

사실, 이처럼 잘 명명 된 단계로 세분화 한 것은 매우 읽기 쉽습니다.

이 문서를 참조하십시오 : http://www.codinghorror.com/blog/2008/07/coding-without-comments.html "로드()"라는 사용자에게 하나의 노출 포인트에 대해이 방법은 다음 내부적으로, 그들은로드 할 것을 지시 거기에 열거 인수 걸릴 수 있습니다 어떻게

0

당신 이 외부 노출 된 호출을 구현하고 싶거나 원하는만큼 많은 메소드를 가질 수 있습니다.

3

큰 문제는이 방법이 모두 공개되어야하는지 여부입니다. 이상 적으로는 모든 공용 Load * 메소드를 호출하여 데이터베이스의 모든 것을로드하는 단일 public 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 
    } 
} 

은 여전히 ​​그 백업 필드에 값을로드 강제로 단일로드() 메소드를 가질 수있는 보완.

0

구현에 따라 단일 Load 메서드 또는 적어도 적게로드 메서드로 압축 할 수 있습니다. 많은 LoadX() 메소드 대신 하나 또는 몇 개의 Load (Xx) 메소드가 될 수 있습니까? 예 :

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