Вы должны разработать свой API так, чтобы он имел смысл как универсальный API, не особенно для поддержки модульного тестирования или динамических макетов.
Шаблон, который вы предлагаете, является просто вариацией шаблона проектирования Template Method , за исключением того, что метод является свойством. Если вы думаете, что в целом имеет смысл реализовать доступ к зависимостям как виртуальные свойства, то вы можете использовать описанную вами технику. Это хорошо известная методика модульного тестирования под названием извлечение и переопределение .
Однако я бы по-разному сделал это по ряду других причин.
- Даже если вы можете переопределить зависимость, по умолчанию могут перетаскиваться ссылки на «реальную», предполагаемую зависимость, создавая более тесную связь, чем вы можете захотеть.
- Если вы забыли извлечь и переопределить , используется зависимость по умолчанию, и вы можете этого не захотеть. Иногда лучше четко указать предполагаемое использование.