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

时间:2012-05-03 11:05:10

标签: c# wcf web-services anti-patterns

您好,我一直在阅读一些讲义,但我无法解释为什么这种方法:

[OperationContract]
Student PostStudent (Student student);

很好。

这种方法很糟糕:

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

然而我实现的版本是:

[OperationContract]
void PostStudent(Student student);

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

Student PostStudent (Student student); //?

4 个答案:

答案 0 :(得分:3)

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

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

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

当您想要查看创建的学生时,您也可以定义PostStudentResult(或PostResult<T>)类并返回该类,其中包含属性Student(或{{1 }}和T Result,其中第一个包含创建的学生,后者表示创建是否成功。

答案 1 :(得分:0)

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

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

如果你需要接收一些学生,你应该创建一个方法:

Student GetStudentByName(string name);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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