Что такое конкретная реализация? - PullRequest
16 голосов
/ 23 июня 2010

Я видел много постов в StackOverflow и других местах, где говорилось о конкретной реализации.Пока я возился с WCF, я прошел через строку

Привязка реализации вашего сервиса или любого «сервисного» класса к конкретной реализации никогда не будет хорошей идеей.

МожетКто-нибудь объяснить, что такое конкретная реализация?

Ответы [ 4 ]

12 голосов
/ 23 июня 2010

Это реализация чего-то абстрактного (абстрактный класс, интерфейс). Обратите внимание, что вы можете создавать экземпляры только объектов конкретных классов.

Например, если у вас есть:

abstract class AbstractClass
{
    .......
   // Here you have some abstract methods 
}

class ConcreteClass : AbstractClass
{
.......
}

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

Как это:

[ServiceContract(Namespace = "MyNamespaceName")]
interface IMyInterface
{
    [OperationContract]
    int SomeMethod(.....);

   ......    
   ......    
}

[ServiceBehavior(......)]
public class SomethingConcrete : IMyInterface
{
    // implementation of SomeMethod
}
9 голосов
/ 23 июня 2010

Если у вас есть интерфейс или абстрактный класс, его необходимо реализовать.

Класс, который реализует такой интерфейс или класс, называется конкретной реализацией (поскольку может быть создан только такой реализованный класс).

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

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

В термине «конкретная реализация» слово «конкретный» является избыточным.Реализация всегда конкретна, абстрактной реализации нет.Итак, важен только термин «реализация».

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

1 голос
/ 03 мая 2014

Я, наконец, понял это из Главы Первой книги «Шаблон дизайна».

Очень простое объяснение.

Представьте, что есть интерфейс или абстрактный класс Animal с методом makeSound ().

Представьте себе, что есть класс Dog с методами bark () и makeSound ().

Программирование для реализации (Конкретная реализация) Класс Dog для Animal будет

Dog d = new Dog();
d.bark();

Программирование для интерфейса / супертипа класса Dog для Animal будет

Animal animal = new Dog();
animal.makeSound();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...