Для меня одна из главных причин использовать МОК (и использовать внешнюю конфигурацию) вокруг двух областей:
Тестирование
, Если Вы разделяете свое тестирование на 3 сценария (который довольно нормален в крупномасштабной разработке):
, Что Вы захотите сделать, для последних двух сценариев тестирования (Интеграция & Черный квадрат), не, перекомпилировали любую часть приложения.
, Если какой-либо из Ваших сценариев тестирования требует, чтобы Вы изменили конфигурацию (т.е.: используйте другой компонент, чтобы подражать банковской интеграции или сделать загрузку производительности), это может быть легко обработано (это действительно прибывает под преимуществами конфигурирования стороны DI МОК все же.
Дополнительно, если Ваше приложение используется любой на нескольких сайтах (с различным сервером и конфигурацией компонента) или имеет изменяющуюся конфигурацию на продуктивной среде, можно использовать более поздние этапы тестирования, чтобы проверить, что приложение обработает те изменения.
Производство
Как разработчик Вы не делаете (и не должен) иметь контроль над продуктивной средой (в особенности, когда Ваше приложение распределяется нескольким клиентам или отдельным сайтам), это мне - реальная выгода использования и МОК и внешняя конфигурация, как это до поддержки инфраструктуры/производства, чтобы настроить и скорректировать продуктивную среду, не имея необходимость возвращаться к разработчикам и через тест (более высокая стоимость, когда все, что они хотят сделать, переместить компонент).
Сводка
основные преимущества, что внешняя конфигурация МОК прибывает из предоставления другим (неразработчикам) питания настроить Ваше приложение, по моему опыту, это только полезно под ограниченным стечением обстоятельств:
На практике я нашел, что, разрабатывая что-то, что Вы действительно управляете средой, на ней будут работать, со временем лучше дать кому-то еще возможности изменить конфигурацию:
Примечание: Приложение относится к полному решению (не только исполняемый файл), таким образом, все файлы, требуемые для приложения работать .
Я не могу придумать причину, по которой это было бы плохо для меня.
Было бы намного хуже переопределить базовый метод и скопировать функциональность базового метода для условного вызова вместо простого вызова базового метода.
class HardHearingPerson : Person
{
override void Listen()
{
if (volume.Acceptable())
base.Listen();
}
}
Думаю, это зависит от контекста, но я уверен, что это могло оправдать использование.
Я делаю это довольно часто. Каждый раз, когда мне нужно «сделать что-то еще» в методе, я переопределяю его, делаю свои вещи и вызываю базовый метод (или наоборот)
Классы должны быть предназначены для наследования :
Если базовый класс спроектирован таким образом, что вызов базовых версий определенных методов является необязательным, то эти вызовы можно опустить.
Если базовый класс спроектирован таким образом, что ДОЛЖНЫ вызываться базовые версии, тогда нельзя опустите их.
Я считаю, что обсуждение того, является ли это «хорошей практикой», упускает из виду главное. Способ, которым класс структурирован для наследования, основан на его назначении и дизайне. Решение , вы МОЖЕТЕ или ДОЛЖНЫ вызывать базовые версии метода, является частью общедоступного интерфейса классов в отношении наследования. .
Можно »
Я думаю, что это вполне приемлемо. Вы можете захотеть переопределить поведение метода базового класса только при определенных обстоятельствах или расширить поведение, вызвав базовый метод, а затем выполняя свои собственные действия.