SergeyTeplyakov / DesignPatternsBook

Паттерны проектирования на платформе .NET
32 stars 2 forks source link

Принцип разделения интерфейсов на практике #238

Closed SergeyUsok closed 9 years ago

SergeyUsok commented 9 years ago

Класс может наследовать базовому классу

наследоваться от базового класса ИЛИ наследовать логику базового класса

рисунок 4.2 не загружен

Листинг 4.3 - Явная реализация интерфейса ILogSaver

  • это листинг 4.2
  • пример кода нарушает OCP!

Листинг 4.2 - Явная реализация интерфейсов для четкого разделения интерфейсов

  • это листинг 4.3
  • там метод должен быть GetLogEntry() - ты y не написал

а вспомогательные метод реализовать в виде методов расширения

методЫ

В этом случае базовый интерфейс

после "случае" запятая

И вообще, мне кажется здесь стоит уточнить, что методы расширения для каждого клиента должны быть в своем пространстве имен, иначе получим тот же самый толстый интерфейс

для разбора многосточных записей

многостРочных

Листинг 4.3 - Использование Принципа разделения интерфейса с методами расширения

  • листинг 4.4
  • интерфейсОВ
SergeyTeplyakov commented 9 years ago

пример кода нарушает OCP!

Это же адаптер! Его смысл в получении максимально легковесной оболочки. Ну и этот пример не обязательно нарушает принцип единственного выбора. Так что все ок!

SergeyTeplyakov commented 9 years ago

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

В C# 6.0 появляется возможность импортировать методы расширения отдельного класса;)

Мысль, в целом, правильная, но, ИМХО, это будет излишнем. Для человека, который это знает, это будет очевидным, а для того, кто этого не знает, сноска эта ничего не даст, поскольку человек тут про дизайн читает, а не про особенности языка C#.

SergeyUsok commented 9 years ago

1)

Класс может наследоваться базового класса для повторного использования кода

ОТ базового класса

2) Еще раз, рисунок 4.1 не загружен