2012-06-17 2 views
1

동일한 기본 구현에서 상속 한 연결 클래스의 데이터베이스에 대한 액세스를 캡슐화하고 있습니다. 이 기본 구현에는 데이터베이스 액세스를위한 protected LINQ 공급자가 있지만 대부분의 자식 클래스에서 사용합니다. 일부는 자체 공급자가 필요할 수 있으며 일반적으로 "기본"공급자는 사용하지 않습니다.클래스 디자인 : "대체 된"내부 멤버를 숨기거나하지 않으려면?

이 "다른"공급자는 기본 개체에서 파생되지는 않지만 (공통적 인 유사 추상 조상을 공유하지만 그 자체로는 아무 쓸모가없는) 각 클래스 내에서 정확히 같은 역할을하므로 똑같은 방식으로, 즉 같은 문법을 사용할 수있어서 좋을 것 같습니다. new 키워드를 사용하여 해당 멤버를 숨겨서이 작업을 수행 할 수 있지만 이것이 좋은 연습인지 여부는 확실하지 않습니다.

한편으로는 잘못된 정보를 잘못 사용하는 것을 피하는 데 도움이됩니다. 반면에 기본 및 특정 공급자에 대해 동일한 이름을 사용하는 데 익숙해지면 실제로 특정 공급자를 구현하고 여기에서 사용하기에 적합하지 않은 공급자로 작업하는 것을 실제로 잊어 버릴 수 있습니다. 따라서 기본값을 적절하게 지정하는 것이 좋습니다. 특정 연결 클래스를 개발할 사람은 언제 특정 공급자를 사용해야 하는지를 알게되고이를 얻으려면 코드를 만들어야한다는 것을 상기해야합니다.

더 합리적인 이유는 무엇입니까? 나는 지금 후자쪽으로 약간 기울고있다.

답변

2

키워드는 입니다. 거의 항상 잘못된 생각입니다. 이 옵션은 다른 옵션이없는 경우를위한 "최후의 수단"기능 중 하나이며,이 경우에는 다른 옵션이 있습니다.

두 제공자가 서로 다른 의미/API를 사용합니까, 아니면 정확히 동일한 사용법입니까? 후자의 경우 adapter pattern을 조사하고 적절하게 재정의하는 유형 ILinqProviderAdapter (정의하고 구현하는)의 간단한 가상 속성으로 속성을 구현할 수 있습니다.