Web services 分布式服务如何优于分布式对象?

Web services 分布式服务如何优于分布式对象?,web-services,oop,architecture,modeling,Web Services,Oop,Architecture,Modeling,我对技术不感兴趣,例如CORBA与Web服务,我对原则感兴趣。当我们在进行面向对象编程时,为什么我们要在更高的层次上进行如此程序化的操作呢?它与OOP和关系数据库不一样吗?通常通过代码生成来支持服务,除了样板文件,我认为这是因为我们使用了新的SOM-服务对象映射器。那么,究竟是什么原因造成了我们的设备而不是对象呢?嗯,在高层次上几乎没有什么不同。但在实现级别,分布式对象、CORBA、JavaRMI等还有很多需要改进的地方。我试图在实际生产系统中使用CORBA和后来的RMI,保持版本同步是一场噩梦

我对技术不感兴趣,例如CORBA与Web服务,我对原则感兴趣。当我们在进行面向对象编程时,为什么我们要在更高的层次上进行如此程序化的操作呢?它与OOP和关系数据库不一样吗?通常通过代码生成来支持服务,除了样板文件,我认为这是因为我们使用了新的SOM-服务对象映射器。那么,究竟是什么原因造成了我们的设备而不是对象呢?

嗯,在高层次上几乎没有什么不同。但在实现级别,分布式对象、CORBA、JavaRMI等还有很多需要改进的地方。我试图在实际生产系统中使用CORBA和后来的RMI,保持版本同步是一场噩梦


这些天来,我发送消息并得到回复。

分布式对象意味着什么?必须同步的同一对象的两个副本?两阶段提交对象的每个更改?复杂的

在网络中从一个位置移动到另一个位置?在这种情况下,您必须确保正确放弃“所有权”。一个主机如何知道另一个主机已更改对象的状态?它必须——什么——再复制回来

“分布式对象”模型迅速变得复杂

一个服务——最简单的说——意味着只有一个主机提供服务并维护状态。几十年来,关系数据库一直是这种服务模型的范例。以及其他传统服务(如电子邮件、NIS等)

由于只有一台主机提供服务,拷贝之间没有同步,没有重复,复杂性非常有限

“为什么我们要在更高的层次上进行如此程序化的工作?”

你没有更高层次的程序

您有一个具有多个方法的对象(提供服务的主机)。它完全是面向对象的


一般来说,它是一个单身汉,这使生活变得非常简单

分布式服务与分布式对象之间的主要区别在于,根据定义,服务及其操作是粗粒度的,而对象默认是细粒度的

进行远程调用时,网络延迟是一个事实,界面越粗糙越好。面向服务的模式和实践侧重于构建这样的接口


因此,总而言之,问题不在于技术或协议(二进制与XML),而在于使用场景。您可以在CORBA中创建“服务”,并在WCF中进行老式的分布式对象编程,但前者似乎更倾向于对象,而后者——倾向于服务……

分布式对象和远程过程调用类似于进程之间的共享状态,而服务是自包含的


它可以与共享状态语言中的普通OOP和使用Actor模型且无共享状态的语言之间的关系进行比较(如在Erlang中,有许多轻量级进程不共享任何内容,只通过消息进行通信)。参与者模型方法不那么复杂,可以在并发性等方面给您带来好处。

为什么相反?分布式服务和分布式对象的概念即使不完全重叠,也有很大的重叠(毕竟SOAP是对象访问协议)。WCF是通过一行配置在“web服务”和“远程对象”之间切换的一个示例

差异主要是术语上的,由应用的历史区域来解释


(Szymon写的基本上是同一个eariler)

好吧,忘记我在问题中所问的技术困难,告诉我以WS-way发送消息与在分布式对象中传递消息有什么不同?传递分布式对象意味着传递对象的代码和数据。当我写到传递消息时,我的意思是传递一些文本/字符串数据,这些数据可以被解析/读取到接收端的对象中。这很像使用RDBMS包而不是自己做文件IO,有了DBMS,其他人可以添加列、索引等,而您的代码不在乎。当你传递对象时,你必须保持它们的定义同步。我同意,实现分布式对象可能更为复杂,但映射需要权衡。此外,服务的参数只能是纯数据,不能是对象,因此在我看来,即使采用单例思想,它也不会显得更非过程性。我并不是说服务和流程是不自然的,正如你提到的,它们在很多情况下都更好,但OOP在主流应用中取代了较低级别的过程编程,所以我想开发人员更容易用OOP来思考,就像我一样。@GabrielŠčerbák:“服务的参数只能是纯数据,不能是对象。”:错。参数可以是序列化对象。服务是对象。将OO设计应用于服务很容易。为什么你总是重复服务只是过程?它们是单例对象的方法。有时将对象用作参数可能是有效的用例,但不是因为它的数据,而是因为它的行为。您将如何使用服务对此进行建模?如何将行为放入作为参数传递给服务调用的数据中?你会将某种url作为参数传递给另一个singleton吗?这似乎是一个实际的观点,但它仍然不是一个真正的参数,因为有许多概念更粗粒度,可以使用,也可以使用对象建模服务。我不完全确定您是否只是举个例子提到了参与者,或者您是否间接提出了面向对象的服务替代方案。别误会我的意思,我只是想看得更远一些。我只是试图通过对比“香草OOP”和演员模型之间的区别来阐明这个问题。所谓香草OOP,我指的是C#/Java/任何东西中的主流OOP。OO——这一理念——更大,更具吸引力