微软四项SOA准则 放弃还是坚持?
微软的Harry Pierson(网名DevHawk)建议微软应该放弃他们的四项SOA准则,因为Harry认为它们是无用的,至少已经不再有用
微软的Harry Pierson(网名DevHawk)说道:“我认为这些准则的使命已经完成。一旦你接受了面向服务的范型,这些准则还能起到什么指导作用吗?基本不能。”
这些SOA准则最早要追溯到2004年Don Box在MSDN上发表的《A Guide to Developing and Running Connected Systems with Indigo》(Indigo即现今的Windows CoMMunication Foundation,WCF)。Don Box在文章中说WCF是以SOA的原则为基础,这跟其他方式,特别是面向对象不同,SOA有另外一组前提:
“在Indigo中,服务即指靠消息交换与之交互的一个程序。一组被部署的服务即为一个系统。一个服务是以存续为前提构建的——服务的可用性和稳定性是其关键。服务聚合而成的系统天生就允许改变——即便是在初始的服务与客户部署之后很久,系统也必须适应新加入的服务,而且不能破坏任何功能。
面向服务的开发必须以下面四项基本准则为基础:”
Don随后解释了下面四项准则:
- 边界是明确的。
- 服务是自治的。
- 服务共享数据定义与契约,而非类。
- 服务兼容性根据策略来确定。
如前所述,Harry认为这些准则不太有用。John Heintz也认为SOA准则并不能真正约束实现方案。Harry根据他与John Heintz的讨论作出了总结:
“准则1:边界是明确的。(当然了,有什么不是边界明确的?好吧,基于SQL的集成策略不满足这条。那么我要怎样才能划分出好的边界?怎样才更容易版本化?怎样才对Mashup/集成更友好?)
准则2:服务是自治的。(没错。这是一个伟大的目标,但对如何达成目标完全没有任何指导和范围。)
准则3:服务共享数据定义与契约,而非类。(我所有的采用接口与类的OO程序都满足这条。到底有什么不同之处可以用来区分SOA与OO设计?)
准则4:服务兼容性根据策略来确定。(这条还算不错:策略的类型和范围可以塑造一个架构。策略即是系统中的约束条件。不过还是没有定义是怎样的策略,只是说应该要有策略。) ”
Hartmut Wilms 不太同意Harry的主张,他认为这些主张在完美的SOA世界中可能成立,但在现实中则行不通。特别是考虑到WCF最终成了一个更通用通信框架,其适用范围已经不限于SOA:
“John和Harry,你们真的认为每个开发者都接受了面向消息的范型吗?真的觉得“面向服务已经是主流”?我恐怕不同意。除非把CLR/JVM/……摆在第一位的方式能被厂商们禁止,而群众又能听从,否则还远没到让这四项准则退休的时候! ”
Don Box这位最初提出这些准则的作者,也对此作了评论。Don说发表这些准则的原意是为了解释WCF的构建原则(或者至少是Indigo的最初目标)。
“目标仅仅局限于在相当抽象的层次上说明“我们希望你这样用它”。 ”
抛开最初的意图不谈,这四项准则支配了微软在过去四年中对SOA的观点。你认为这些准则有任何功劳吗?还是Harry说得对,是时候抛弃它们了?最后,我不得不说,有什么不做微软开发的人关心它们该不该退休吗?
- 本文关键词:

