0

我被要求从事一个基于 SOA 并使用 WCF 的项目。我曾涉足 WCF(创建和消费),但从未涉足 SOA。我是否正确地说单个服务将具有通常的服务层、业务层和数据访问层(如果需要)。然后服务层将公开方法。

服务A可以引用服务B,服务B可以引用服务A吗?

然后一个 UI 可以通过引用访问这些服务——这本质上是 SOA?我正在努力寻找最新的、最近的教程 (Youtube),而我在网上看到的“指南”似乎非常复杂。

4

2 回答 2

2

我认为这个维基百科条目很清楚?

让我们尝试一个简单的例子。假设我们有图书馆应用程序,可以让您签入和签出书籍。

如果您查看接近 n 层系统的“传统”非 SOA 方式,那么您将拥有一个名为MyService的服务,该服务具有类似CheckOutBook. 这将消失,内部有一个Book类和一个Person类,并会执行 sayBook.IsAvailable = FalsePerson.NumberOfBooks.

这很好,但是假设您现在有另一个应用程序想要与 People 一起工作。您不能只使用上述服务,因为逻辑与您正在做的事情紧密耦合,即图书馆事务。相反,您必须将代码复制/粘贴到新服务“BookShop”中。

使用 SOA,您将拥有Book服务和Person服务。Person 服务将有一个动作,例如Person.AssociateWithBookLibrary 和 BookShop 都可以使用而无需更改,因为它足够简单,可以做最少的事情。然后由应用程序调用正确的服务来完成所需的工作。这意味着它是可重用的,无需修改各种服务。

这非常简单,但希望能显示架构差异并让您继续前进?

于 2013-04-29T08:45:22.650 回答
1

我会跳过有关 SOA 的问题,因为每个人都可以将 SOA 称为 SOA,无论他理解 SOA(面向服务的架构)是什么。我的意思是,每个使用服务的架构都可以称为 SOA...

从技术方面来看,我会用下一种方式构建它:

IMO,服务本身应该具有尽可能少的逻辑(如外观模式),所有逻辑都应该移至业务逻辑。

使用 ServiceA.BusinessLogic 的服务 A 调用服务 B(服务 B 的代理可用于 ServiceA.BL)。

服务 B 也一样,调用服务 A。

这将为您提供双向通信,而不会出现双工问题(回调中断,...)。

UI 也应该访问服务 - 使用 UI.BusinessLogic(我通常更喜欢将服务通信视为一种通信数据访问层)。

于 2013-04-29T08:39:20.650 回答