Взаимодействие между этими двумя службами будет трудно проследить, как только размер базы кода увеличится.Даже учитывая этот простой пример (хорошая работа по сокращению проблемы до ее сути, кстати), мне пришлось несколько минут посмотреть на код, чтобы понять, что происходит.
Кроме того, подобный дизайн кажетсябудьте близки к нарушению принципа замены Лискова (LSP), потому что он будет работать только тогда, когда используются конкретные конкретные реализации.Согласно LSP, вы должны иметь возможность обмениваться одним подтипом с другим без изменения правильности системы.Это возможно здесь?Можете ли вы заменить реализацию IServiceWithProperty
, которую вы имеете в виду, другой реализацией, которая ничего не делает?
Вместо этого следуйте Принципу обращения зависимостей , из которого следует, что клиенты должны определять абстракцию.Итак, если MyController
требуется абстракция, которая может перевести int
во что-то еще, то это абстракция, которая ему требуется:
MyController(ITranslator translator) {
_translator = translator;
}
public IActionResult Get(int setting) {
return Ok(_translator.Translate(setting));
}
Следующий шаг - выяснить, как реализоватьITranslator
интерфейс.