【发布时间】:2014-09-01 09:24:06
【问题描述】:
注意:我知道问题标题不是最理想的。随时改进。
Thrift 启用序列化以及 RPC。但是,与 COM 或 CORBA 或 ZeroC ICE 等系统不同,...它确实没有以多态方式具有远程对象或远程接口的概念,因此在 Thrift 基础结构中定义的所有服务都只是函数集合。
Thrifts Non-Features 将多态性状态(接口?)作为一个足够公平的非目标,但是 ...
作为一名使用自然使用对象的语言的程序员,我可以拥有返回其他对象(或接口引用)的函数,而不仅仅是结构,这似乎有点尴尬,因为这意味着所有“节俭服务中的对象”功能必须由另外将句柄作为输入参数的函数提供,以定义正在操作的内容——有点像在 C 中做 OO :-)
想象一下对文件进行操作的 thrift 服务。它的接口看起来更像 C 的接口(@987654322@ 等),而不是我们今天在 C++、C# 甚至 Python 中使用的接口。
当然可以用目标语言编写额外的包装器,但你没有 Thrift 框架的任何支持,所以这就是我所说的“尴尬”。
换一种说法:回到远程服务级别的纯过程界面是否有问题?
再给一个转折点:即使我使用 Jenkins 的 REST 接口,我也觉得基于 URL 的接口有点“OO”,因为我通过 URL 名称访问作业对象,然后指定对它们的操作通过 GET 参数。也就是说,对我来说,基于字符串的 REST 方法似乎可以比纯粹的过程接口更自然地捕获对资源(对象或接口,如果你喜欢)的操作。 完全可以 Thrift 将其定义为超出范围,但最好知道用户是否认为这是一件值得注意的事情。
这是活跃的 Thrift 用户的问题:我上面描述的问题是日常使用中的实际问题吗?这完全是一个观察到的问题吗?
这是 SOA 的一般“问题”吗?
【问题讨论】:
-
Is this [ABC feature / design] from [XYZ language / platform] awkward?在我看来是一个主要基于意见的问题。 -
"回到远程服务级别的纯过程接口是否有问题?" - 类似对象的接口只是所有可能用例的一个子集。 Thrift 只是为了覆盖整个事情的 RPC 部分。核心目标之一是效率,因此任何可以在 RPC/序列化方面构建的东西都被认为超出了 Thrift 的范围(顺便说一句,ProtoBuf 也是如此)。