在我的应用程序中,可以连接多个服务器。每个服务器都可以有更多的存储库,可以在应用程序中打开。我有一些对象用于包装在具体服务器中的存储库上调用webservices的逻辑,它们是单例(这是不重要的)。 该应用程序通常会处理0-5个服务器,每个服务器将有0-5个存储库。对象数量为5。
我想将这些对象存储在类中,但是
Dictionary<string, Dictionary<string, Dictionary<type, IServiceProvider>>>
看起来有点奇怪......我只是偏执狂或这真的是个坏主意吗?
答案 0 :(得分:3)
声明有点长且难以阅读,但这样就可以了。
为了更好的可读性和可用性,请考虑创建一个表示此结构并具有更好命名的类或结构。
答案 1 :(得分: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; }
}
由于您的特定访问模式,这也可能无法使您的代码更具可读性。可视化(或原型化)两种方法并选择一种感觉更好的方法。
答案 2 :(得分:2)
只要您适当地定义相等和哈希码(或者为了简单起见,甚至使用结构代码),您可以拥有聚合键:
class ServiceProperties
{
public int ServerId {get;set;}
public int RepositoryId {get;set;}
public type ServiceType {get;set;}
//define equality, hashcode
}
现在您可以使用Dictionary<ServiceProperties, IServiceProvider>