虽然我可以找到很多主张SOA或WCF的文章,但我的问题是不应该将其作为服务公开,我们从SOA失败中学到了什么减少。 WCF是一种实现SOA的方法,如果我们使用WCF,这意味着我们正在实现SOA。肯定有很多人使用C#编写不可维护的代码。
答案 0 :(得分:15)
我认为你的权利。在我目前的任务(Web开发)中,对数据库的每次访问都是作为服务实现的。我们是“纯粹的SOA”,正如首席架构师所说......哇!
事实上,这增加了一切的复杂性。当我想阅读一个简单表的内容时,我必须生成8个项目,42个文件,8个程序集以及可能9个配置文件!
我说的很复杂。有可能在某个地方会忘记一个文件......将简单的过程暴露为服务是愚蠢的。
在我的书中,您应该在以下情况下将您的流程公开为服务:
另外,请注意服务必须设计为服务,并且设计服务至少与设计库一样复杂:必须精心设计错误捕获,日志必须足够灵活,文档必须完整,等
嗯,正如我所看到的,我每天使用的大多数服务都不会被其他人使用:没有文档,错误处理不当,代码经常更改,第二个区域数据......
嗯,非常有趣的问题。 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
此致