C#应用程序与ruby msgpack服务器交谈,它期待一个ruby类型的哈希?

时间:2012-02-18 02:56:49

标签: c# ruby msgpack

我希望构建一个小应用程序来与C#中的ruby msgpack服务器通信。到目前为止,我唯一的持有是服务器背后的API预计会提取ruby散列。我可以在C#中使用简单的字典/键值对类型吗?如果没有,你会建议什么?

我将使用msgpack网站上提到的库(http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+C+Sharp)。但是,它似乎只支持原始类型?我试图采用IronRuby方式,但是单声道中存在一个非常严重的错误,阻止您使用它。 https://bugzilla.xamarin.com/show_bug.cgi?id=2770

1 个答案:

答案 0 :(得分:0)

通常可以使用不同的技术堆栈构建系统的不同部分。因为这些部分应该能够相互通信(这种或那种方式),所以在子系统之间指定 contract 非常重要。

首先首先考虑这些合同非常重要,因为系统的这些部分(子系统)可能(并且毫无疑问)会发生变化(由于其业务逻辑的演变,错误修复等。)。

通过签订这些合同,您可以独立更改子系统,而不会影响所有“客户端”(其他子系统)。否则你最终会得到“我需要解决这个问题,但可能会影响我甚至不知道的那些地方”。

好吧,只要您持有合同,您就可以在给定的子系统中做任何您想做的事情,这只是一个天堂! :)

这意味着您通常希望定义一个平台无关的合同,而不是“拉出ruby哈希”,这将根据您的业务逻辑显示为方面。应用即可。然后,该合同可以由任何技术编写的任何其他子系统使用。

这也意味着您不想在子系统之间传递一些数据,而是要传递一些对象。这些对象不仅包含您想要传递的数据,还包含描述这些数据,并赋予它一些含义。通过这个“描述”,我的意思是对象类型,属性名称等。你知道,对象是自我描述的。

您可以声明ruby子系统的合同说“我接受这些查询并返回这些结果”。查询(方法)和结果(对象)都应该根据指定子系统的业务逻辑来制定。例如,GetProducts契约应该返回Product个对象的列表,而不是一些无意义的“红宝石哈希”。因此,所有消费者都会知道合同是什么以及期望什么。

你可以把它作为一个标准,然后说“在子系统之间传递的所有对象被序列化为JSON(或XML)”,这在Ruby,C#或任何其他语言中都是微不足道的,以及真正的平台无关

因此,回到你的问题,你通常在生活中没有这样的问题,如使用一些错误的库将类型转换为.NET类型,或做类似的疯狂事情:)

简单地定义合同和标准化传输(JSON?)可以帮助您实现许多方式,从解决这个问题开始,一直到拥有干净且易于维护的系统。