我们公司正在启动一个相当大的SOA计划。我们正在做很多正确的事情:良好的沟通;在适当的地方购买工具的钱;并且我们已经引进了一些优秀的专业知识来帮助我们过渡。
我们正在尝试制定可以作为一个整体遵循的标准,其中一项提议的标准使我颇为困扰:
我们已经在模式上进行了标准化,其中每个操作都需要一个请求对象并返回一个响应对象。
我意识到这对于许多人来说或多或少是一种标准方法,但是我在问我为什么要打扰?(我对所接受的智慧不是很好,我需要一些理由)。
我将提供的大多数服务是简单的组织元数据检索。例如,找到特定用户的安全策略。这需要一个用户ID,无其他要求。该标准告诉我,我应该将此请求包装在一个对象中,并将返回的策略包装在一个响应对象中。
查看合同产生的WSDL会加剧我的不安。WCF自动生成请求和响应消息,甚至包装请求/响应对象。
我完全理解,如果您要发出复杂的请求,那么就需要一个复杂的输入对象。即使服务不涉及,那也是您要做的。
我的问题是为什么在以下情况下我应该自动包装请求和响应:
- 它使简单服务的表现力降低
- 无论如何,您都会为复杂的服务而做
- WCF无论如何都会创建请求/响应消息
我发现以下论点支持这种方法:
它通过允许将可选参数放入请求对象中来支持版本控制。
过去,我做了很多的COM,我认为这几乎是版本控制的反模式。对于某些事情,我想它会有所帮助,但我希望它会有所帮助,无论如何您已经有一个参数对象。
它允许将常见数据和行为隔离到基类
这个给我带来一些分量。
它使人们远离RPC样式的行为而转向消息传递的行为
我已经在Microsoft网站上阅读了此内容,并从我们的专家那里听到了,但是我仍然不清楚它们的含义或价值所在。看起来自然的界面是否使人们倾向于忘记他们正在调用远程服务?
我正在考虑重构大约300种方法的签名,因此这是不小的痛苦。我非常喜欢实现的一致性,因此我愿意承担痛苦,这将有助于知道最终所有这些都是值得的。