我想将程序的模块分开以便彼此通信。它们可能在同一台计算机上,但可能在不同的计算机上。
我正在考虑两种方法:
所以它归结为散列表与类。
如果我认为'松散耦合',我赞成哈希表。更新一个模块很容易,在hastable中包含新的额外参数,而不更新另一方。
然后再次使用类我得到编译时类型检查,而不是运行时。
有没有人先解决这个问题并对此提出建议?
谢谢!
编辑: 我已经给出了与我原来的问题最相关的答案,虽然它不是最受欢迎的答案
答案 0 :(得分:4)
听起来您只想将一些IPC (Inter-Process Communication)合并到您的系统中。
在.NET(3.0以后版本)中实现此目标的最佳方法是使用Windows Communication Foundation (WCF) - 由Microsoft开发的通用框架,用于以各种不同方式(传输)在程序之间进行通信。
虽然我怀疑您可能希望使用命名管道以提高效率和健壮性,但还有许多其他传输可用,例如TCP和HTTP(请参阅this MSDN article) ,更不用说从二进制到XML到JSON的各种序列化格式。
答案 1 :(得分:2)
人们倾向于在分布式系统设计中遇到这种问题。它表现在Web Service(定义参数和返回类型的WSDL)消息传递系统中,消息的格式可能是XML或其他一些定义良好的格式。在所有情况下,控制客户端和服务器的耦合的问题仍然存在。
您的哈希表会发生什么?假设您的请求包含“NAME”和“PHONE-NUMBER”,突然您意识到您需要区分“LANDLINE-NUMBER”和“CELL-NUMBER”。如果只是更改哈希表条目以使用新值,那么您的服务器需要同时更改。假设此时您不仅拥有一个客户端和一个服务器,而且可能正在处理某种交换或代理系统,许多客户实施的许多客户端,许多团队实施的许多服务器。要求所有人同时升级到新的消息格式是一项艰巨的任务。
因此,我们倾向于寻求回溯可解决的解决方案,例如添加更改,我们保留“PHONE-NUMBER”并添加新字段。服务器现在可以容忍包含旧格式或新格式的邮件。
不同的分发技术对于后向兼容性具有不同的内置容忍度。在处理序列化类时,您可以处理新旧版本吗?在处理WSDL时,消息解析器是否容忍添加剂更改。
我会遵循以下流程:
1)。您是否在客户端和服务器之间有一个简单的关系,例如,您是否编码和控制它们,可以自由地指定它们的发布周期。如果“不”,则支持灵活性,使用哈希表或XML。
2)。即使您掌控着您的序列化框架支持版本控制的容易程度。强类型的序列化类接口可能更容易使用,只要您清楚地了解对接口进行更改将会采取的措施。
答案 2 :(得分:0)
内置的Remoting支持发生了什么?
http://msdn.microsoft.com/en-us/library/aa185916.aspx
如果需要,它适用于TCP / IP或IPC。它比WCF更快,并且对您的代码非常透明。
答案 3 :(得分:0)
你可以使用Sockets,Remoting或WCF,eash有利有弊。
但是如果性能不是很重要,你可以使用WCF并序列化和反序列化你的类,为了获得最大的性能,我建议使用套接字
答案 4 :(得分:-1)
根据我们在过去几年中广泛使用WCF进行各种绑定的经验,我们发现WCF不值得麻烦。
正确使用WCF会很复杂,包括正确处理通道上的错误,同时保持良好的性能(我们在早期就放弃了wcf的高性能)。
对于经过身份验证的客户端方案,我们切换到http rest(没有wcf)并执行json / protobuf payloading。
对于高速非认证方案(或至少是非kerberos认证方案),我们现在使用zeromq和protobuf。