一直在创建一些wcf方法,我有一个名为IsValidLogin的方法...有各种版本,1个需要2个字符串,1个需要一个对象等。
当然在WCF你不能重载方法,任何人都可以建议命名这些方法的最佳方法..
我在考虑IsValidLogin1,IsValidLogin2 ??
但我愿意接受任何建议。
答案 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命名为您的问题。在请求/响应模式之上,我可能还会将方法重命名为ValidateLoginByUser
和ValidateLoginByUsername
(或类似的东西)。
答案 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代表对象,然后在最后写一封有用的信。从长远来看,不止一个数字会帮助你