Интерфейс как сервис в программировании на основе интерфейса: как реализовать класс провайдера услуг для своего клиента с помощью интерфейса - PullRequest
1 голос
/ 10 декабря 2010

Прежде всего, я надеюсь выбрать хороший заголовок для моего вопроса.

в соответствии с главой 7 книги "Essential C #", которая пытается описать концепцию интерфейса штепсельная вилка является интерфейсом и всеми приборами (клиенты) которые хотят получать питание переменного тока, должны реализовать этот интерфейс. заставляет меня задавать несколько простых вопросов.

1-В нашем Домене есть объект под названием Socket, который является поставщиком энергии и другими словами, Поставщик услуг , какова связь между этим поставщиком услуг и службой (интерфейсом), и как мы должны реализовать класс сокетов. Кто-нибудь может дать пример реализации класса сокетов или дать несколько советов? Или образец исходного кода? Спасибо всем.

2-Если мы посмотрим на интерфейс как контракт или спецификацию Мы находим, что иногда необходимо учитывать некоторые постоянные значения в нашем контакт (или спецификация) и другие не должны изменять и модифицировать эти элементы и должны следовать им точно так же, как PinsDistance и PinsLength в нашем домене, Но мы знаем, что это не возможно в C # для использования Константа в интерфейсе (в Java Это возможно) Как вы решаете эту проблему.

Пример реализации этого выпуска представлен здесь.

interface I2PinsWallPlug
{
    void Plug();
    void Unplug();

    //***** Its Not Allowed To Use Const In an Interface In C# *****
       //const int Pinsdistance = 1;
       //const int PinsLength=5;
    //***** Its Not Allowed To Use Const In an Interface In C# *****
}

// A sample appliance is As a Client And Must Implemnt The Interface To Recieve Power 
class MyAppliance : I2PinsWallPlug
{
    public void Plug()
    {
       //...
    }

    public void Unplug()
    {
        //...
    }


}

//The Socket Class is Our Service Provider In Here and 
//I dont know My implementation Is Right Or Not ?????????????
class Socket
{
    public Socket( I2PinsWallPlug twoPinsWallPlug)
    { 
    }
}

Ответы [ 3 ]

0 голосов
/ 10 декабря 2010

как насчет использования абстрактного базового класса, а не интерфейса

public abstract class I2PinsWallPlug
{
    protected const int Pinsdistance = 1;
    protected const int PinsLength = 5;

    public abstract void Plug();
    public abstract void Unplug();
}

public class MyAppliance : I2PinsWallPlug
{
    public override void Plug()
    {

    }

    public override void Unplug()
    {

    }
}
0 голосов
/ 10 декабря 2010

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

" Наследование не является подтипом

Возможно, самая распространенная путаница, связанная с объектно-ориентированными языками, - это разница между подтипами и наследованием. Самое простое различие между подтипом и наследованием заключается в следующем: подтип - это отношение к интерфейсам, наследование - это отношение к реализациям"

Ссылка: Разработка программного обеспечения - издательство Кембриджского университета - Основные понятия в языках программирования

0 голосов
/ 10 декабря 2010

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

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


Пример класса для констант

public static class SystemConstants
{

    public static readonly string Foo= "BAR";
    public static readonly int[] ValidTypeIdsForBaaz = new int[]{290,291};

}

ОБНОВЛЕНИЕ - Вопрос 1

Зависит от того, что мы подразумеваем под обслуживанием.Служба обычно логична, а иногда и физическая.Логическая служба живет в той же границе процесса, в то время как ее абстрагируют клиенты, а физическая служба находится в другом процессе на той же машине или на другой машине, что и веб-служба, служба WCF или ...

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

...