Подскажите, пожалуйста, причину этой структуры (Сервисы + Интерфейсы в ASP.NET)? - PullRequest
0 голосов
/ 02 июля 2010

Я новичок в Web / WCF / Services - так что потерпите меня:)

Я пытаюсь проанализировать поток кода в приложении .NET, но мне трудно понять причины использованияследующий подход, когда дело доходит до предоставления сервисов:

Теперь в приложении у меня есть C # Class Lib Proj, в котором есть проект библиотеки классов C # под названием «XXX.YYY.Services», в котором у меня есть 2 файла.:

ISomeServiceProviderClass.cs SomeServiceProviderClass.cs

Внутри ISomeServiceProviderClass.cs У меня есть следующая структура кода:

 [ServiceContract]
    public interface ISomeServiceProviderClass
    {
        [OperationContract]
        int SomeFunc();
    }

Затем существует класс SomeServiceProviderClass.cs, которыйопределяется следующим образом:

public class SomeServiceProviderClass: ISomeServiceProviderClass
{
    public int  SomeFunc()
    {

        /// some code to do the implementation..
    } 
}

Это примерная структура службы в моем приложении поставщика.Очевидно, что приложение Consumer использует этот сервис для отображения результатов в своем уровне пользовательского интерфейса.

Теперь я хочу знать, зачем нужен интерфейс ISomeFile.cs, а затем SomeFile.cs, который реализует этот интерфейс?

Я догадывался, что одной из причин может быть предоставление различных типов реализаций в каждом классе, реализующем этот интерфейс ... Если это так, то почему бы не иметь только файл SomeServiceClass.csв рамках которого у меня есть виртуальные функции, которые могут быть переопределены в производных классах?Или почему бы не иметь абстрактный класс с абстрактными функциями?

Ответы [ 3 ]

0 голосов
/ 02 июля 2010

В сервисе ISomeServiceProviderClass реализован вашим исходным кодом SomeServiceProviderClass. Однако на клиенте ISomeServiceProviderClass реализуется канальным классом WCF, который обрабатывает связь со службой.

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

0 голосов
/ 02 июля 2010

Шаблон называется «сначала контракт» и используется для явного отделения контракта кода (что вы можете считать верным) от реализации.Веб-службы основаны на контрактах WSDL, которые в основном представляют собой XML-представление этого контракта.

0 голосов
/ 02 июля 2010

Подсказка содержится в атрибутах [ServiceContract] и [OperationContract] в ISomeServiceProviderClas s. Они указывают, что ISomeSomeServiceProviderClass определяет контракт на обслуживание WCF.

Этот контракт (т. Е. Интерфейс) может быть реализован с помощью кода на стороне сервера для выполнения реальных операций, а на стороне клиента он динамически реализуется WCF для создания прокси-сервера, который передает вызовы по сети на сервер.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...