C#应用程序正在与ruby msgpack服务器对话,该服务器需要一个ruby类型的哈希
本文关键字:服务器 ruby 哈希 类型 一个 应用程序 msgpack 对话 | 更新日期: 2023-09-27 18:24:57
我希望构建一个小型应用程序,与C#中的ruby msgpack服务器进行对话。到目前为止,我唯一的问题是服务器后面的API希望提取一个ruby散列。我可以在C#中使用一个简单的字典/键值对类型吗?如果没有,你有什么建议?
我将使用msgpack网站上提到的库(http://wiki.msgpack.org/display/MSGPACK/QuickStart+对于+C+Sharp)。然而,它似乎只支持原始类型?我试着采用IronRuby的方式,但是mono中有一个非常严重的错误,阻止了你使用它。https://bugzilla.xamarin.com/show_bug.cgi?id=2770
使用不同的技术堆栈构建系统的不同部分是正常的。因为这些部分应该能够相互交谈(以这种或那种方式),所以指定子系统之间的合同很重要。
首先考虑这些合同非常重要,因为您的系统(子系统)的这些部分可能(而且毫无疑问)会发生变化(由于其业务逻辑的发展、错误修复等)
通过这些合同,您可以在不影响所有"客户端"(其他子系统)的情况下独立更改子系统。否则,你最终会患上"我需要解决这个问题,但可能会影响很多我甚至不知道的地方"综合症。
好吧,一旦你持有合同,你就可以在给定的子系统中做任何你想做的事,这简直是天堂!:)
这意味着,您通常希望定义一个平台不可知的契约,而不是"提取ruby散列",该契约将作为应用程序业务逻辑方面的一个方面公开。然后,这个合同可以被任何其他用任何技术编写的子系统使用。
这也意味着,与其只是在子系统之间传递一些数据,不如传递一些对象。这些对象不仅包含要传递的数据,而且还描述了这些数据,使其具有某种意义。我所说的"描述"是指对象类型、属性名称等。你知道,物体是自我描述的。
您可以声明您的ruby子系统的合同,上面写着"我接受这些查询,并返回这些结果"。查询(方法)和结果(对象)都应该根据指定子系统的业务逻辑来制定。例如,GetProducts
契约可能应该返回Product
对象的列表,而不是一些毫无意义的"ruby散列"。因此,所有的消费者都会知道合同是什么,以及该期待什么。
然后,您可以将其作为标准,说"在子系统之间,所有传递的对象都被序列化为JSON(或XML)",这在Ruby、C#或任何其他语言中都是微不足道的,而且是真正的平台无关性。
因此,回到你的问题,你通常在生活中不会遇到这样的问题,即使用一些有缺陷的库将ruby类型转换为.NET类型,或者做类似的疯狂事情:)
简单地定义合同和标准化传输(JSON?)可以在许多方面帮助您,从解决这个问题开始,一直到拥有一个干净且易于维护的系统。