2012-02-23 94 views
0

在我的应用程序中可以连接多个服务器。每个服务器可以有更多的存储库,可以在应用程序中打开。我有几个对象用于包装在具体服务器上调用Web服务的存储库中的逻辑,并且它们是单例(这是不重要的)。 该应用程序通常会处理0-5个服务器,每个服务器都有0-5个回购站。对象的数量是5多个嵌套字典

我想对这些对象存储在一个班,但

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

似乎有点不可思议......我只是在偏执或者这真的是一个坏主意?

+0

@MartinLiversage - 感谢对于我的EN :) – Zavael 2012-02-23 14:09:41

回答

2

你可以有合计键,只要你定义适当的平等和hashCode(或为简单起见,即使使用结构代替):

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 2012-02-23 14:07:30

3

该声明有点长,难以阅读,但正因为如此,这是OK代码。

为了获得更好的可读性和可用性,请考虑创建一个表示此结构的类或结构,并指定更好的名称。

+0

感谢:)首先我没有看到你的意思,但BrokenGlass给与代码相同:) – Zavael 2012-02-23 14:11:14

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这可以用得很好,但接受的答案溶剂看起来更实用我的目的:)但仍然谢谢你的回答 – Zavael 2012-02-23 14:14:15