2012-02-23 2 views
0

내 응용 프로그램에는 여러 서버가 연결될 수 있습니다. 각 서버에는 응용 프로그램에서 열 수있는 더 많은 리포지토리가있을 수 있습니다. 필자는 구체적인 서버의 저장소에서 webservices를 호출하는 로직을 래핑하기위한 몇 가지 객체를 가지고 있는데, 이들은 싱글 톤 (이것은 중요하지 않다)이다. 앱은 대개 0-5 개의 서버를 처리하며 각 서버에는 0-5 개의 repos가 있습니다. 객체의 수 5.여러 개의 중첩 된 사전

나는 수업 시간에 이러한 개체를 저장할

하지만

Dictionary<string, Dictionary<string, Dictionary<type, IServiceProvider>>> 

조금 이상한 것 같다는 ... 난 단지 편집증 건가요 또는이 정말 나쁜 생각입니까?

+0

@MartinLiversage 사용할 수 있습니다 - 감사 내 엉덩이를 corecting에 대한 – Zavael

답변

2

당신만큼 당신이 적절하게 평등과 해시 코드를 정의로 집계 키를 가질 수 있습니다 (또는 단순화를 위해도 대신 구조체를 사용) :

이제
class ServiceProperties 
{ 
    public int ServerId {get;set;} 
    public int RepositoryId {get;set;} 
    public type ServiceType {get;set;} 

    //define equality, hashcode 
} 

당신은 단지 Dictionary<ServiceProperties, IServiceProvider>

+0

아, 그쪽으로, 그쪽으로 내 마음을 넘어 설 수 있었다 : D 감사합니다. – Zavael

3

선언문은 길고 읽기가 어렵지만 확인 코드입니다.

더 나은 가독성과 유용성을 위해이 구조를 나타내며 더 나은 이름을 가진 클래스 또는 구조체를 만드는 것이 좋습니다.

+0

+1 답장을 주셔서 감사합니다 :) 처음에는 당신이 무슨 뜻인지 보지 못했지만, BrokenGlass 코드와 동일을 가지고 :) – Zavael

2

에 따라 다릅니다. 한편으로는 Dictionary (또는 다른 연관 컨테이너)이 작업을위한 올바른 도구라고 느낄 수 있습니다. 반면에, 귀하의 액세스 패턴이 완벽하게 일치하지 않는 구조라도 여전히 의 성능이 필요하지 않습니다. 모든 데이터 구조는 엄청나게 적은 수의 항목에 대해 빠릅니다. 당신이 사전의 트리에 실제로 인덱스를 할 경우

그래서, 코드에 모든 시간, 당신은 대신 이들의 List을 가질 수 단순히 선형 검색 당신이 필요 할 때마다 수행

class Wrapper 
{ 
    public string Server { get; set; } 
    public string Repository { get; set; } 
    public Type Type { get; set; } 
    public IServiceProvider Provider { get; set; } 
} 

특정 액세스 패턴으로 인해 코드를 읽기 쉽게 만들지 못할 수도 있습니다. 두 가지 접근법을 시각화 (또는 프로토 타입)하고 사용하기에 더 좋은 것으로 선택하십시오.

+0

+1이 너무 잘 사용할 수 있지만 +1 대답 sollution에 대한 더 실용적 보였다 내 목적 :) 그래도 대답 주셔서 감사합니다 – Zavael

관련 문제