WCF"避免类似属性的操作"规则

rem*_*rem 0 wcf

JuvalLöwy的"编程WCF服务"一书包含一个"WCF编码标准"附录,其中附有WCF服务的一般设计指南.

其中一个指导原则是避免类似属性的操作:

//Avoid property-like operations:
[ServiceContract]
interface IMyContract
{
   [OperationContract]
   string GetName();
   [OperationContract]
   void SetName(string name);
 }
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下string GetName();手术有什么问题吗?如果字符串值是我需要的一个操作怎么办?

Lad*_*nka 5

如果你需要一个字符串值,你将不再需要任何东西,那么它绝对是正确的.可能反模式的更好例子是:

[ServiceContract]
interface IMyContract
{
   [OperationContract]
   void SetFirstName(string firstName);
   [OperationContract]
   void SetLastName(string lastName);
}
Run Code Online (Sandbox Code Playgroud)

和客户打电话:

proxy.SetFirstName("Test");
proxy.SetLastName("Test");
Run Code Online (Sandbox Code Playgroud)

这是完全错误的.您应该有单个操作接受名字和姓氏.

通常,您应该避免繁琐的接口并减少服务和客户端之间的往返次数.因此,如果您知道只需要名称,则只公开返回名称的操作.但是,如果您知道您将在同一客户的业务运营中,还需要通过电子邮件公开将返回姓名和电子邮件的操作.