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

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

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

Кто-либо может объяснить, какова Конкретная реализация?

17
задан NLV 28 January 2015 в 15:53
поделиться

3 ответа

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

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

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
}
12
ответ дан 30 November 2019 в 12:57
поделиться

В термине "конкретная реализация" слово "конкретная" является лишним. Реализация всегда конкретна, абстрактной реализации не существует. Поэтому важен только термин "реализация".

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

5
ответ дан 30 November 2019 в 12:57
поделиться

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

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

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

9
ответ дан 30 November 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: