Wcf 对于具有不同签名的同一方法,建议使用命名约定?

Wcf 对于具有不同签名的同一方法,建议使用命名约定?,wcf,overloading,Wcf,Overloading,正在创建一些wcf方法,我有一个名为IsValidLogin的方法。。。有各种版本,1取2个字符串,1取一个对象等 当然,在WCF中,你不能重载方法。有人能建议命名这些方法的最佳方法吗 我在想iValidLogin1,iValidLogin2 但我愿意接受任何建议。我认为IsValidLogin1、2等还不够清楚。通常重载方法时,不必担心名称,因为名称相同,参数不同,但是在这种情况下,必须记住每个方法的参数,数字可能会混淆 我可能建议使用IsValidLoginNumStr等,也就是说,可能在方

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

当然,在WCF中,你不能重载方法。有人能建议命名这些方法的最佳方法吗

我在想iValidLogin1,iValidLogin2


但我愿意接受任何建议。

我认为IsValidLogin1、2等还不够清楚。通常重载方法时,不必担心名称,因为名称相同,参数不同,但是在这种情况下,必须记住每个方法的参数,数字可能会混淆


我可能建议使用IsValidLoginNumStr等,也就是说,可能在方法名称中列出关键参数,以帮助提醒您所引用的方法。或者如果一个人需要密码,那么是有效的登录密码,或者类似的东西。我这样说是因为我喜欢使用长的、描述性的方法名。如果你想让名字尽可能短,你可以想出一个有用的字母,比如P代表密码,O代表对象,然后在末尾加上一个有用的字母。从长远来看,一些比数字更有用的东西将帮助您

当您开始向标识符添加索引号时,您通常会出错

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


我只需要调用方法IsValidUsernamePassword和IsValidToken。

首先,在使用wcf服务、传递请求和返回响应时,您应该坚持消息/契约优先的方法。这会让你在路上省去很多头疼的事

也就是说,您应该创建如下两种方法:

public LoginValidResponse IsLoginValid(UserObjectRequest userRequest)

也许有更好的名字,但是你知道了。如果你能提供更多关于你所传递的信息,我可以帮你命名更多

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

将两个字符串放在UsernamePasswordRequest中(我假设字符串是username和password)。将用户对象放入UserObjectRequest中

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

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

*注意-我仅将您提出的问题命名为方法
IsLoginValid
b/c。在请求/响应模式之上,我还可以将这些方法重命名为类似于
ValidateLoginByUser
ValidateLoginByUsername
(或类似的名称)

当然,在WCF中,你不能重载方法。有人能建议命名这些方法的最佳方法吗

您可以通过添加唯一的OperationContract行为来重载WCF中的方法。OperationContract具有向WSDL架构公开WCF方法的Name属性。您的服务端(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);
你可以在这里读更多


非常感谢,这正是我所需要的。我通常使用“By”,但概念相同。@GalacticCowboy:对于主要用于获取数据的方法,我更喜欢使用“By”
GetUserById
等等。
TestClient client = new TestClient();
string callMethod1 = client.IsValidLoginWithUsernameAndPassword("user","pass");
string callMethod2 = client.IsValidLoginWithToken(authToken);