2010-01-29 241 views
3

从您的真实世界体验来定义服务契约是否可以使用一种方法来接受某个对象作为请求的一种形式,并返回其他某个对象作为该请求的结果。我的意思不是创建,删除,编辑和搜索客户的方法,而是将这些活动封装在DataContracts中,接收到此类DataContract后执行的操作将采取相应的措施。但是,服务接口是这么简单:WCF服务设计问题

interface ISomeService 
{ 
    IMessageResult Process(IMessageRequest msg); 
} 

所以IMessageRequest会提交名为OperationType = OperationTypes.CreateCustomer和领域的其余部分将提供,它可以在数据库或任何创建Customer对象或记录的服务足够的信息。并且IMessageResult可以有一些代码的字段来指示客户是否被创建。

我试图通过这样的设计实现的功能是轻松地将IMessageRequest委托给客户端甚至不知道的其他内部服务。我看到的另一个好处是,如果我们必须为客户添加一些操作,我们只为此操作提供额外的DataContract,并且不必在服务接口端改变任何内容(我希望不惜一切代价避免这种情况,我的意思不是新的但改变服务界面:)

那么,你觉得呢?这是处理复杂业务流程的好方法吗?什么是坑,什么可能会更好。

如果我复制了一些其他线程,并且我的问题有一些答案,请为我提供链接,因为我没有找到它们。

回答

2

简短的回答:是的,这可能是一个非常好的主意(我已经在一种或另一种形式中实施了几次)。

这种方法的一个很好的起点是Davy Brion的帖子,他称之为request/response layer。他将自己最初的想法&想法整合到一个名为Agatha的非常实用的OSS项目中,我在撰写本文时正在客户网站上提出这个项目。

+0

感谢这些链接,戴维似乎准确地描述了我打算做的事情 – grapkulec 2010-01-29 11:58:43

1

这正是我们在这里工作的地方。它工作的很好,对于所有开发人员来说都很容易理解,并且很容易连接新的方法/类/等。