2017-02-27 3 views
0

새로운 프로젝트를 시작하고 베테랑 건축가/디자인 패턴 전문가의 조언이 필요합니다!C#에서 런타임시 지속성 레이어를 변경하는 방법

내 새 프로젝트에는 클라이언트가 런타임시 데이터가 저장 될 위치 (예 : 집 SQL 데이터베이스, MS Exchange 또는 Google 스토리지)를 결정할 수 있도록 여러 지속성 계층이 있어야합니다.

기능은 본질적으로 각각의 저장/구현이 동일 할 것입니다.

여기서 내가 찾고있는 것이 아니라면 내 목적을 달성하는 데 사용할 수있는 최상의 패턴을 가리키는 포인터입니다. 변화가있을 때 유연성을 발휘할 수 있습니다. 난 필연적으로 몇 가지 역겨운 코드 냄새로 이어질 구체적인 구현을 피하기 위해 노력하고있어.

나는 길을 따라 어떤 종류의 DI가 포함될 것이라는 것을 알고 있지만, 여기에있는 모든 포인터는 크게 감사하겠습니다.

답변

1

사례와 관련하여 특별한 것은 없으므로 DI로 표준 사례를 따르고 용기를 사용하여 SimpleInjector과 같은 작업을 쉽게 수행하면 트릭을 수행 할 수 있습니다. 당신의 주된 요점은 구체적인 클래스에 의존하지 말고 추상화에 있어야하며, 이것이 DI 컨테이너가 당신을 도울 때 도움이 될 것입니다.

예. 사용자를 저장하려는 경우 IUserRepositorySaveUser 메소드가있을 수 있습니다. 그런 다음 SqlUserRepository, GoogleStorageRepository 등을 구현합니다. 다른 데이터 액세스 레이어 인터페이스에서도 마찬가지입니다. 이 작업을 수행하는 경우 필요에 따라 런타임에 필요한 리포지토리를 제공 할 수있는 방식으로 DI를 구성해야합니다. 직접적으로 GoogleStorageRepository 등에 의존하는 것을 잊지 말고 공통 인터페이스에서만 사용하십시오. 나는 인터페이스를위한 프로젝트 (그리고 DL이 인식 할 수있는 해당 BI 데이터 모델)와 각 구현 당 프로젝트를 만들어 더 멀리 분리 할 것이다.

1

저장소 패턴은 모두 지속성 계층과 비즈니스 계층을 분리하는 것입니다.

웹상의 많은 예제는 데이터 엔티티에 대한 래퍼로 잘못 사용 된 경우를 보여줍니다. 그것은 틀 렸습니다. 저장소 클래스/인터페이스의 디자인은 첫 번째 데이터 저장소의 모양이 아닌 비즈니스 요구 사항에 따라 결정되어야합니다.

따라서 사용 사례에 가장 적합한 패턴입니다. 비즈니스 계층 관점에서 저장소 인터페이스를 정의한 다음 MSSQL과 같은 각 데이터 저장소에 대한 구현을 만듭니다. 나는 심지어 비즈니스 계층에 해당 인터페이스를 추가하여 그러한 관점을 더 보여줍니다.