Вызов веб-методов из того же веб-сервиса - PullRequest
5 голосов
/ 25 января 2011

Мне нужно написать оболочку для коллекции веб-методов, предоставляемых в определенном веб-сервисе.Имеет смысл поместить этот новый метод-оболочку в тот же сервис, поскольку он влияет на объект того же типа.

Большинство этих веб-методов - просто тонкие методы, которые вызывают статические методы в других файлах, что нормально, ноу них также есть некоторая логика безопасности, сделанная перед этими статическими вызовами методов.Вместо того, чтобы воссоздавать логику безопасности перед каждым вызовом метода, который я хочу обернуть, возможно ли просто вызывать эти другие веб-методы из одной и той же службы локально, или это плохая практика?

Вот пример:

[WebMethod]
public int SmallMethod1(int a)
{
    //SecurityLogic
    return AnObject.StaticMethod1();
}

[WebMethod]
public int SmallMethod2(int b)
{
    //SecurityLogic
    return AnObject.StaticMethod2();
}

[WebMethod]
public int WrapperMethod(int c)
{
    return AnObject.StaticMethod1() + AnObject.StaticMethod2();
}

Ответы [ 2 ]

4 голосов
/ 25 января 2011

Как правило, вы хотите отделить общедоступный интерфейс вашего веб-сервиса от фактической реализации настолько четко, насколько это возможно, в вашем примере вы сделали это, заключив их в AnObject, что позволяет по отдельности тестировать инкапсулированные методы отдельно (чтов противном случае это большая проблема, особенно для веб-методов).

Сказав это с точки зрения тестирования, я бы предпочел сделать следующее:

[WebMethod]
public int WrapperMethod(int c)
{
    return AnObject.WrapperMethod(c)
}

Это позволит вам писать тесты, которые тестируют WrapperMethod напрямую (инкапсулировано в AnObject), вместо того, чтобы пытаться воссоздать тестирование для AnObject.StaticMethod1() + AnObject.StaticMethod2() в ваших модульных тестах - это быстро становится грязным, потому что теперь у вас одинаковая логика в двух разных местах.

0 голосов
/ 25 января 2011

Совсем нет.Это очень хорошая идея, чтобы заключить эту логику.Вы могли бы иметь AnObject.WrapperStaticMethod().

...