Подтвердить что ты не робот

Какова конкретная реализация?

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

Связывание реализации службы или любой класс, основанный на услуге, для конкретная реализация никогда не является хорошая идея.

Может ли кто-нибудь объяснить, что такое Concrete Implementation?

4b9b3361

Ответ 1

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

Просто, например, если у вас есть:

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
}

Ответ 2

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

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

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

Ответ 3

В терминах "конкретная реализация" слово "бетон" является избыточным. Реализация всегда конкретна, нет абстрактной реализации. Итак, что важно, это просто термин "реализация".

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

Ответ 4

Я, наконец, понял это из книги First First "Design Pattern".

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

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

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

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

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

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

Animal animal = new Dog();
animal.makeSound();