具有不同签名的相同方法的推荐命名约定?

时间:2010-06-01 14:11:59

标签: wcf overloading

一直在创建一些wcf方法,我有一个名为IsValidLogin的方法...有各种版本,1个需要2个字符串,1个需要一个对象等。

当然在WCF你不能重载方法,任何人都可以建议命名这些方法的最佳方法..

我在考虑IsValidLogin1,IsValidLogin2 ??

但我愿意接受任何建议。

4 个答案:

答案 0 :(得分:4)

当您开始向标识符添加索引编号时,通常会做错了。

我看到的一种方法是在名称中添加“With”和参数名称,即IsValidLoginWithUsernamePassword和IsValidLoginWithToken(假设您的对象是某种身份验证令牌)。这些都很长。

我只是调用方法IsValidUsernamePassword和IsValidToken。

答案 1 :(得分:2)

首先,在使用wcf服务,传递请求并返回响应时,您应该坚持使用消息/合同优先方法。这将为您节省很多头痛的道路。

话虽这么说,你应该创建两个方法:

public LoginValidResponse IsLoginValid(UserObjectRequest userRequest)

public LoginValidResponse IsLoginValid(UsernamePasswordRequest usernameRequest)

这些可能有更好的名字,但你明白了。如果您提供了有关您传入和传回的内容的更多信息,我可以帮助您更多地命名。

请注意,这两个方法返回相同的响应LoginValidResponse

将两个字符串放在UsernamePasswordRequest中(我假设字符串是用户名和密码)。将User Object放在UserObjectRequest中。

您还可以在以后的方法中重复使用这些请求/响应,例如GetUserInfo(UserObjectRequest request)

LoginValidResponse将包含您的bool(以及您希望在回复中传回的任何其他信息)。

*注意 - 我只是将方法IsLoginValid b / c命名为您的问题。在请求/响应模式之上,我可能还会将方法重命名为ValidateLoginByUserValidateLoginByUsername(或类似的东西)。

答案 2 :(得分:2)

  

当然在WCF中你不能重载方法,任何人都可以建议命名这些方法的最佳方法。

您可以通过添加唯一的OperationContract行为来重载WCF中的方法。 OperationContract具有Name属性,该属性将WCF方法公开给WSDL模式。您的服务端(WCF)代码将保持干净。但是你仍然需要通过在OperationContract行为的Name属性中定义的签名来调用方法。

[OperationContract(Name="IsValidLoginWithUsernameAndPassword")]
void IsValidLogin(string username,string password);


[OperationContract(Name="IsValidLoginWithToken")]
void IsValidLogin(AuthToken token);

用法......

TestClient client = new TestClient();
string callMethod1 = client.IsValidLoginWithUsernameAndPassword("user","pass");
string callMethod2 = client.IsValidLoginWithToken(authToken);

您可以在这里阅读更多内容

http://www.codeproject.com/Tips/656042/Method-Overloading-in-WCF

答案 3 :(得分:0)

我认为IsValidLogin1,2等不够清晰。当您正常重载方法时,您不必担心名称,因为它具有不同参数的相同名称,但是在这种情况下,您必须记住每个方法的参数,并且数字可能会变得混乱。

我可能会建议IsValidLoginNumStr等,也就是说,可能列出方法名称中的关键参数,以帮助提醒您所指的是哪种方法。无论是那个,还是一个人拿密码,然后是IsValidLoginPass,或类似的东西。我这样说是因为我喜欢冗长的描述性方法名称。如果你想尽可能缩短名称,你可以想出一个有用的信,比如P代表密码,或O代表对象,然后在最后写一封有用的信。从长远来看,不止一个数字会帮助你