gpt4 book ai didi

wcf - WCF 数据契约中是否可以包含 WCF 操作契约?为什么?

转载 作者:行者123 更新时间:2023-12-04 14:19:39 28 4
gpt4 key购买 nike

我有一个数据契约(Contract)说用户。它是可序列化的并且可以通过网络传输。我想要一个操作契约(Contract) SaveUser()。我可以将 SaveUser(User user) 作为运营契约(Contract)保留在我的服务契约(Contract)中。但是我可以把它作为自己的行为保存在我的数据合约中吗?

Save() 应该理想地保存自己。所以按照 OO 原则,每个数据合约都应该知道如何保存自己,细节应该从外部世界中抽象出来。

这在 WCF 中可能吗?

最佳答案

我会说不,这是正确的。
尽管我同意您对 OO 原则和封装的看法,但 WCF 处理的是 SO(面向服务)原则。
以 CD 播放器和 CD 的形式考虑这一点。 CD 播放器就是服务。 CD 是数据契约(Contract)。 OO 原则将要求 CD 具有 Play 方法以便能够自行播放。但是,播放 CD 不仅仅是了解它的数据。有电子设备、输出插孔的接口(interface)等。这些都是由 CD 播放器提供的……服务。
这就是为什么您的服务契约(Contract)有 Play 方法,并接受 CD 作为数据契约(Contract)告诉它要播放什么(而不是如何播放)。

在您评论中的问题后编辑:
不,当然(希望)不是。最坏的情况是您将拥有 34 个服务契约(Contract),每个服务契约(Contract)平均有 6 个方法。只有当您确定每个类上的每个方法都必须作为服务操作发生时,才会出现这种情况。您需要考虑两个方面。方面 1:服务的设计。您应该将 34 个类分组到一个有意义的组中,而不是 34 个服务契约(Contract),并为每个组创建 1 个服务契约(Contract)。例如,您可能最终得到一个 InventoryManagement 服务、一个 SalesOrderProcessing 服务和一个 BackOfficeOperations 服务。这些服务中的每一个都包含与分组到其域中的类范围相关的服务操作(和数据协定)。
方面 2:客户端发生了什么。我提到你必须考虑每个类的方法是否必须是 WCF 服务操作。在客户端上拥有丰富的完全封装的业务类当然是有必要的。在它们的操作不需要作为服务操作执行的地方,这些操作在客户端域中执行它们的逻辑。问题变成了如何通过服务将它们发送给客户端,这里有两种选择:a) 在客户端上实例化一个实例,并从服务操作返回的 DataContract 填充它的属性。 b) 直接从服务操作返回对象,就像在 CSLA 之类的框架中所做的那样(我认为 DevForce 遵循类似的方法通过 WCF 服务返回业务类)。
高温高压

关于wcf - WCF 数据契约中是否可以包含 WCF 操作契约?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3664995/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com