Рекомендуемые соглашения об именах для одного и того же метода с разными сигнатурами? - PullRequest
2 голосов
/ 01 июня 2010

создала несколько методов wcf, и у меня есть метод с именем IsValidLogin ... там разные версии, 1 принимает 2 строки, 1 принимает объект и т. Д.

Конечно, в WCF нельзя перегружать методы, кто-нибудь может предложить лучший способ назвать эти методы.

Я думал о IsValidLogin1, IsValidLogin2 ??

Но я открыт для любых предложений.

Ответы [ 4 ]

4 голосов
/ 01 июня 2010

Когда вы начинаете добавлять номера индексов к своим идентификаторам, вы обычно делаете это неправильно.

Один из способов, которые я видел, это добавление «С» и имен параметров к имени, то есть IsValidLoginWithUsernamePassword и IsValidLoginWithToken (при условии, что ваш объект является своего рода токеном аутентификации). Это довольно долго, хотя.

Я бы просто вызвал методы IsValidUsernamePassword и IsValidToken.

2 голосов
/ 19 июня 2014

Конечно, в WCF нельзя перегружать методы, кто-нибудь может предложить лучший способ назвать эти методы.

Вы можете перегружать методы в WCF, добавляя уникальные поведения OperationContract. OperationContract имеет свойство Name, которое предоставляет методы WCF для схем WSDL. Ваш код службы (WCF) останется чистым. Но вам все равно придется вызывать методы по сигнатуре, определенной вами в свойстве Name поведения OperationContract.

[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

2 голосов
/ 01 июня 2010

Прежде всего, вы должны придерживаться методологии «сообщение / контракт сначала» при работе со службами wcf, при передаче запроса и возврате ответа. Это избавит вас от головной боли в будущем.

При этом вы должны создать два метода, например:

public LoginValidResponse IsLoginValid(UserObjectRequest userRequest)

и

public LoginValidResponse IsLoginValid(UsernamePasswordRequest usernameRequest)

Возможно, есть более подходящие названия для них, но вы поняли идею. Если бы вы предоставили больше информации о том, что вы передавали туда и обратно, я мог бы помочь с именами немного больше.

Обратите внимание, что эти два метода возвращают один и тот же ответ LoginValidResponse.

Поместите две строки в UsernamePasswordRequest (я предполагаю, что это имя пользователя и пароль). Поместите объект пользователя в UserObjectRequest.

Вы также можете повторно использовать эти запросы / ответы в более поздних методах, например, GetUserInfo(UserObjectRequest request).

LoginValidResponse будет содержать ваш bool (и любую другую информацию, которую вы хотите передать в своем ответе).

* Примечание. Я назвал только методы IsLoginValid b / c, которые были вашим вопросом. Поверх шаблона запроса / ответа я мог бы также переименовать методы во что-то вроде ValidateLoginByUser и ValidateLoginByUsername (или что-то подобное).

0 голосов
/ 01 июня 2010

Я не думаю, что IsValidLogin1,2 и т. Д. Достаточно ясны. Когда вы обычно перегружаете методы, вам не нужно беспокоиться об именах, потому что это одно и то же имя с разными параметрами, однако в этом случае вы должны помнить параметры для каждого метода, и числа могут запутаться.

Я мог бы предложить IsValidLoginNumStr и т. Д., То есть, может быть, перечислить ключевые параметры в имени метода, чтобы помочь вам напомнить, на какой метод вы ссылаетесь. Либо это, либо если кто-то берет пароль, то IsValidLoginPass, или что-то в этом роде. Я говорю это, потому что я поклонник длинных, описательных имен методов. Если вы хотите, чтобы имя было как можно более коротким, и вы можете придумать букву, которая поможет, например, P для пароля или O для объекта, то добавьте полезную букву в конце. Что-то большее, чем число, поможет вам в долгосрочной перспективе

...