2011-04-10 4 views
4

내가 좋아하는 데이터 액세스 계층 (DAL)에서 정적 메서드를 많이 사용하고 있습니다 :static 메소드

public static DataTable GetClientNames() 
{ 
    return CommonDAL.GetDataTable("...."); 
} 

을하지만 일부 개발자는 내부 정적 방법의 아이디어를 좋아하지 않는 것을 발견 DAL. DAL 내부에서 정적 메서드를 사용하거나 사용하지 않을 이유가 필요합니다.

감사

보기의 순수 주의자의 입장에서 토니

답변

3

,이 (구현에 같은 의존성, 꽉 커플 링, 불투명 의존성 등) 모범 사례의 모든 종류의 위반. 나는 스스로 말했을 것이지만, 최근에는 "enterprizey"기능과 유행어에서 너무 많이 뛰어 내지 않고 더 간단한 솔루션으로 옮겨가는 경향이 있습니다. 따라서 이와 같은 코드를 작성하는 것이 좋습니다.이 아키텍처를 사용하면 신속한 개발이 가능하고 테스트가 가능하며 가장 중요한 것은 비즈니스 문제를 해결하는 것입니다.

+0

다른 프로젝트에서 같은 문제가 다시 발생했습니다. 정적 DAL은 OOP 기본 아이디어에 위배되며 잘 확장되지 않는다고 생각합니다. 또한 IOC 컨테이너를 추가하면 이러한 종류의 정적 DAL을 피할 수 있다고 생각합니다. –

1

정적 메서드를 사용하지 않는 이유 중 하나를 선택해야한다면 코드에 대한 단위 테스트를 작성하는 기능이 제한된다는 것입니다. 예를 들어 DAL 용 모의 객체를 작성하는 것은 코딩 할 실제 인터페이스가 없기 때문에 더 어려울 것입니다. 이것은 IoC, 종속성 주입 등과 같은 것을 지원하는 인터페이스를 필요로하는 프레임 워크를 채택하기로 결정할 때 더 제한됩니다.

+0

이것은 또한 매우 좋은 지적이며 IOC로 오늘이 문제를 발견했습니다. –

0

그건 단지 정적입니다. 그렇지 않습니까?

+0

DB에서 클라이언트 이름을 읽어야하며 정적이라고 말할 수 있습니다. 하지만 인스턴스 호출도 CLR에 의한 정적 호출로 끝납니다. 정적 호출을 사용할시기와 인스턴스 호출을 사용하는시기를 잘 모릅니다. –

+0

@ 토니 (Tony) : 귀하의 데이터 소스는 무엇입니까? ORM? 다른 것? – abatishchev

+0

데이터는 SQL 서버에 저장되고 바인딩은 데이터 테이블을 사용합니다. 사용 된 ORM이 없습니다. –