使用运营合同的好方法和坏方法。

Posted

技术标签:

【中文标题】使用运营合同的好方法和坏方法。【英文标题】:Good and bad ways to use operation contracts. 【发布时间】:2012-05-12 21:23:36 【问题描述】:

您好,我一直在阅读一些讲义,但我无法弄清楚为什么要使用这种方法:

[OperationContract]
Student PostStudent (Student student);

很好。

而且这个方法不好:

[OperationContract]
void PostStudent (string firstname, string lastname etc..);

然而我实现的版本是这样的:

[OperationContract]
void PostStudent(Student student);

所以我不确定我实现的版本是否不好,我也不确定我的讲师是如何得到的

Student PostStudent (Student student); // ?

【问题讨论】:

您能否详细说明“这种方法不好”是什么意思? 我只能看到方法是bad,因为方法参数过多(你在... 中遗漏了多少)。您也可以挑剔它不使用驼峰式大小写作为参数名称,但除此之外并没有什么不好的地方。 我对讲师所描述的“好”实现的偏好还基于这样一个事实,即它的输入类型是Student,而不是一堆字符串。这应该不太可能混淆每个参数的含义。但如果您稍后决定这样做,它也会阻止参数的 REST 样式 URL 映射。 @mgnoonan 正是我所说的,这就是他在幻灯片中的全部内容。我可以发布它的屏幕转储,但它正是我提到的。 @faester 我认为 url 映射是直接文档,即你不应该映射到 Student/Student.xml? 【参考方案1】:

Web 服务是基于消息的使用而构建的。 WCF 中的消息是通过编写一个类来定义的,您的 Student 类就是该类,并且 (optionally) 使用 DataContract 属性对其进行标记。这可以在该类的properties 上启用版本控制和设置各种属性(尽管后一种效果也可以使用MessageParameter 属性来实现)。

所以是的,PostStudent (string firstname, string lastname etc..) 很糟糕。

是否从该方法返回某些内容取决于您。 void 可以很好,因为例如使用 SOAP,您可以返回一个错误,指示无法创建用户的原因:没有错误意味着创建顺利。

当你想检查创建的Student时,你不妨定义一个PostStudentResult(或PostResult<T>)类并返回它,包含属性Student(或T Result)和Status,其中第一个包含创建时的学生,后者指示创建是否成功。

【讨论】:

+1 对我来说,“好”版本的主要区别在于它是否更适合未来……它更好地处理版本控制。 msdn.microsoft.com/en-us/library/ms731060.aspx【参考方案2】:

Web 服务中的返回值通常不是坏习惯。所以它是关于参数的。属于一起的数据应该包装在 Objects 中。

此外,Post 方法根本不应该获得返回值。您发布它,如果出现错误,您将收到异常。

如果您需要接收一些学生,您应该创建一个类似的方法:

Student GetStudentByName(string name);

【讨论】:

【参考方案3】:

如果是 WCF,那么使用 Void 方法指定 Action 也是一个很好的做法。

【讨论】:

【参考方案4】:

就像其他人所说的那样,方法参数太多是不好的做法。无论如何,我只能看到您的签名和您提到的良好签名之间的一个区别。例如,将学生对象作为返回将使您能够在数据库中添加学生的 ID。同样的事情适用于对象的任何其他计算属性。使用 void 方法将强制您再次加载对象,这意味着如果您想在发布对象后直接使用该对象,则需要额外访问服务器。如果返回对象只不过是额外的带宽,那么任何具有 void WCF 方法的方法都不错。

【讨论】:

以上是关于使用运营合同的好方法和坏方法。的主要内容,如果未能解决你的问题,请参考以下文章

activiti节点跳转

O2O电商运营模式最佳方法

用户运营的三种模型

快手电商发布“STAGE直播运营方法论”白皮书

自媒体运营的小技巧有哪些?整理分享4种方法!

Smartbi:掌握这四个思维方法,数据运营从入门到精通