Вызов переопределенного базового метода условно в C#

Для меня одна из главных причин использовать МОК (и использовать внешнюю конфигурацию) вокруг двух областей:

  • Тестирование
  • Производственное обслуживание

Тестирование

, Если Вы разделяете свое тестирование на 3 сценария (который довольно нормален в крупномасштабной разработке):

  1. Поблочное тестирование
  2. Интеграционное тестирование
  3. Тестирование методом "черного ящика"

, Что Вы захотите сделать, для последних двух сценариев тестирования (Интеграция & Черный квадрат), не, перекомпилировали любую часть приложения.

, Если какой-либо из Ваших сценариев тестирования требует, чтобы Вы изменили конфигурацию (т.е.: используйте другой компонент, чтобы подражать банковской интеграции или сделать загрузку производительности), это может быть легко обработано (это действительно прибывает под преимуществами конфигурирования стороны DI МОК все же.

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

Производство

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

Сводка

основные преимущества, что внешняя конфигурация МОК прибывает из предоставления другим (неразработчикам) питания настроить Ваше приложение, по моему опыту, это только полезно под ограниченным стечением обстоятельств:

  • Приложение распределяется нескольким сайтам/клиентам, где среды будут отличаться.
  • Ограниченное управление/вход разработкой продуктивной средой и установка.
  • Сценарии тестирования.

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

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

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

7
задан Cœur 22 January 2017 в 14:11
поделиться

5 ответов

Я не могу придумать причину, по которой это было бы плохо для меня.

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

10
ответ дан 6 December 2019 в 08:44
поделиться
class HardHearingPerson : Person
{
  override void Listen() 
  { 
    if (volume.Acceptable()) 
      base.Listen(); 
  }
}

Думаю, это зависит от контекста, но я уверен, что это могло оправдать использование.

7
ответ дан 6 December 2019 в 08:44
поделиться

Я делаю это довольно часто. Каждый раз, когда мне нужно «сделать что-то еще» в методе, я переопределяю его, делаю свои вещи и вызываю базовый метод (или наоборот)

2
ответ дан 6 December 2019 в 08:44
поделиться

Классы должны быть предназначены для наследования :

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

Если базовый класс спроектирован таким образом, что ДОЛЖНЫ вызываться базовые версии, тогда нельзя опустите их.

Я считаю, что обсуждение того, является ли это «хорошей практикой», упускает из виду главное. Способ, которым класс структурирован для наследования, основан на его назначении и дизайне. Решение , вы МОЖЕТЕ или ДОЛЖНЫ вызывать базовые версии метода, является частью общедоступного интерфейса классов в отношении наследования. .

Можно »

1
ответ дан 6 December 2019 в 08:44
поделиться

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

1
ответ дан 6 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

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