SOA或WCF的反模式

时间:2009-01-15 16:40:19

标签: wcf soa

虽然我可以找到很多主张SOA或WCF的文章,但我的问题是不应该将其作为服务公开,我们从SOA失败中学到了什么减少。 WCF是一种实现SOA的方法,如果我们使用WCF,这意味着我们正在实现SOA。肯定有很多人使用C#编写不可维护的代码。

5 个答案:

答案 0 :(得分:15)

我认为你的权利。在我目前的任务(Web开发)中,对数据库的每次访问都是作为服务实现的。我们是“纯粹的SOA”,正如首席架构师所说......哇!

事实上,这增加了一切的复杂性。当我想阅读一个简单表的内容时,我必须生成8个项目,42个文件,8个程序集以及可能9个配置文件!

我说的很复杂。有可能在某个地方会忘记一个文件......将简单的过程暴露为服务是愚蠢的。

在我的书中,您应该在以下情况下将您的流程公开为服务:

  • 许多使用不同语言和框架的应用程序都必须调用你的东西。
  • 涉及多个平台(Windows,Unix ......)。
  • 正在处理的数据是企业的核心。

另外,请注意服务必须设计为服务,并且设计服务至少与设计库一样复杂:必须精心设计错误捕获,日志必须足够灵活,文档必须完整,等

嗯,正如我所看到的,我每天使用的大多数服务都不会被其他人使用:没有文档,错误处理不当,代码经常更改,第二个区域数据......

嗯,非常有趣的问题。 1分:o)

答案 1 :(得分:7)

SOA作为一个概念是个好主意。

使用HTTP-WS / BPEL等实现的SOA是一个值得在我不那么谦虚的观点中死去的笑话。在得知分布式交易的唯一概念是补偿交易后,我不久就认真地停止了系统... bzzt NEXT !!

答案 2 :(得分:4)

我知道有两种主要的反模式:

  • 通过服务层直接公开业务层中的对象
  • 公开特定的细粒度方法,例如业务层中的方法

建议您的服务层包含粗粒度的泛型方法,并让它们接受并返回一些基于消息的大型请求和响应。目标是提供一个相当通用的接口,而不会对如何使用服务做太多假设,也不需要多次调用来实现基本功能。尽量减少Web服务调用的数量。

以下是高级别的一些优秀建议:http://apparchguide.codeplex.com/Wiki/View.aspx?title=Chapter%2013%20-%20Service%20Layer%20Guidelines

以下是指南正在讨论的“消息”类的类型的具体示例,以及如何在WCF中实现它:http://dotnet.org.za/hiltong/pages/windows-communication-foundation-tutorial-part-3-messaging-messagecontracts.aspx

答案 3 :(得分:4)

我发布了一些SOA反模式

关键是许多人认为SOA将逻辑放在网络服务前端并忘记了所产生的RPC的影响(也称为the fallacies of distributed computing

答案 4 :(得分:3)

SOA是最糟糕的概念之一。 SOA是一种架构风格,与Web服务或任何技术无关。 我同意通过Web服务和BPEL解释SOA很容易产生误导,BPEL通常与SOA无关,而是实现WS编排的一种方式。供应商搞砸了它。

我建议一本非常好的可下载书籍,它解释了SOA的真正含义:

http://www.infoq.com/minibooks/enterprise-soa

然后你可以阅读this interesting blog entry

此致