Дизайн по интерфейсу против IoC / DI - PullRequest
2 голосов
/ 21 ноября 2010

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

Единственная причинаЯ могу подумать, если большая команда уже знает конкретную структуру DI / IoC, то все могут быть на одной странице.

С моей точки зрения, DI, похоже, делает то же самое, что и дизайн по интерфейсу, янадеюсь, в этом есть что-то большее, может кто-нибудь объяснить мне, почему использование DI / IoC-фреймворка является лучшей стратегией?

Я действительно надеюсь, что неправильно понял DI / IoC.

Ответы [ 2 ]

5 голосов
/ 21 ноября 2010

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

Если вы ожидаете, что контейнеры DI будут a) быть необычайно сложными животными или b) совершенно новая парадигма дизайна, я считаю, что вы реагируете обычным образом защиты, подходя к чрезмерно раскрученной концепции.

Хотя можно приложить немало усилий для использования DI-контейнеров всеми видами тайных способов.и там есть много мощности, по сравнению с AOP и т. д., типичным местом для простого автоматического подключения зависимостей без какой-либо «всей команды, нуждающейся в понимании» чего-либо или «накладных расходов» (вы имеете в виду концептуальное или перфомансное?Если последнее, измеряли ли вы влияние в реальном приложении?).

Но понимаете ли вы это: - свобода и сосредоточенность на чистом дизайне, обеспечиваемые снижением трения и повышенной пластичностью в результате того, что вы отбрасываетемного стандартного кода (и необходимость перенастроить его, если что-то изменится) контейнеры IOC для менякритическая часть экосистемы развития.Хотя они делают только несколько new здесь и там, их влияние не пропорционально фактической (небольшой) части работы, которую они выполняют.

Что касается того, отличаются ли они отнормальное основанное на интерфейсе программирование и хорошие принципы проектирования, я бы рассматривал их как нечто гораздо меньшее - инструмент, который поддерживает только один из принципов SOLID .

3 голосов
/ 21 ноября 2010

Нет, DI / IoC - это не то же самое, что проектирование по интерфейсу.

Механизм DI / IoC - это просто фабрика больших экземпляров.Это избавляет вас от необходимости писать и поддерживать свое собственное.

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

Я бы посоветовал вам продолжать разрабатывать интерфейсы, но есть и больше DI, чем это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...