|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
hVosttАлексей Кпропущено... DI может существовать и быть полезным без IoC, не так ли? http://sergeyteplyakov.blogspot.ru/2014/11/di-vs-dip-vs-ioc.html авторЧерез свойства должны устанавливаться лишь необязательные зависимости (обычно, инфраструктурные), для которых существует значение по умолчанию (свойство Logger содержит разумное значение по умолчанию, но может быть заменено позднее). Автор забыл сказать о том, что через свойства устанавливаются циклические зависимости, в том числе и обязательные. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 07:01 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
Алексей КНиже пример из жизни, чего можно избежать при использовании ди-контейнера: В твоём коде всё понятно, что откуда берётся, когда создаётся, ты привёл самый обычный фабричный метод. Есть говорить о контексте применения, то как раз инсталлятор должен конфигурироваться централизовано. Не самый удачный пример в подтверждение твоих мыслей. Алексей К1. Области времени жизни. 2. Централизованное конфигурирование создания объектов. 3. Компактность кода. 1. Есть и обратная сторона, когда у тебя контекст времени жизни ясен и очевиден это одно. Другое, когда время жизни зависит от объекта, который использует зависимость. Один берёт попользоваться, другой хочет забрать себе и отдать тогда, когда сам решит. Лишь в теории и на студенческих примерах всё круто. И да, очень часто злоупотребление DI приводит к утечкам памяти или к нерациональной утилизации ресурсов. 2. Бутстраперы это хорошо, но знаешь в чём подвох? Когда-нибудь программисту надоедать регистрировать всё вручную. Это обязательно наступит рано или поздно. И тогда он захочет автоматическую регистрацию всех компонентов с помощью атрибутов. И вот тогда свой пункт 2 можешь смело вычеркнуть, как не имеющий отношения к реальности. 3. Создание дополнительного уровня косвенности никогда не приводит к компактности кода. Наоборот. Просто ты переносишь создание из одного места в другое. Проблему создания объектов решает не только DI, есть другие способы. К слову. Если тебя я правильно понял. То ты пропагандируешь идёю: в топку остальные решения, только DI? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 07:22 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
Алексей КОт наличия или отсутствия ди-контейнера плохой код лучше не станет. Говоря о плохом коде, надо говорить о всех аспектов того, почему он плохой. Злоупотребление DI -- один из многих аспектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 07:23 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
hVosttАлексей КНиже пример из жизни, чего можно избежать при использовании ди-контейнера: В твоём коде всё понятно, что откуда берётся, когда создаётся, ты привёл самый обычный фабричный метод.Которого могло не быть, если бы использовался диконтейнер. hVosttЕсть говорить о контексте применения, то как раз инсталлятор должен конфигурироваться централизовано. Не самый удачный пример в подтверждение твоих мыслей.Данный проект не столь масштабен, чтобы использовать диконтейнер, поэтому он не использован. Но пример показателен. hVosttАлексей К1. Области времени жизни. 2. Централизованное конфигурирование создания объектов. 3. Компактность кода. 1. Есть и обратная сторона, когда у тебя контекст времени жизни ясен и очевиден это одно. Другое, когда время жизни зависит от объекта, который использует зависимость. Один берёт попользоваться, другой хочет забрать себе и отдать тогда, когда сам решит. Лишь в теории и на студенческих примерах всё круто. И да, очень часто злоупотребление DI приводит к утечкам памяти или к нерациональной утилизации ресурсов.Нет. Области оберегают от утечек ресурсов. В том числе для этого они и придуманы. hVostt2. Бутстраперы это хорошо, но знаешь в чём подвох? Когда-нибудь программисту надоедать регистрировать всё вручную. Это обязательно наступит рано или поздно. И тогда он захочет автоматическую регистрацию всех компонентов с помощью атрибутов. И вот тогда свой пункт 2 можешь смело вычеркнуть, как не имеющий отношения к реальности.Кроме атрибутов ещё бывают соглашения, которые отлично работают в прикладном коде. hVostt3. Создание дополнительного уровня косвенности никогда не приводит к компактности кода. Наоборот. Просто ты переносишь создание из одного места в другое. Проблему создания объектов решает не только DI, есть другие способы. К слову.Какие ещё "косвенности"? Тупо экономим на фабричных методах и присваиваниях свойств или вызовах конструкторов. Пример приведён выше. hVosttЕсли тебя я правильно понял. То ты пропагандируешь идёю: в топку остальные решения, только DI? Я никогда ничего не пропагандирую. Просто ты в очередной раз удивляешь своим идеализмом. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 07:44 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
Алексей К, Очень не хотелось этого говорить, но.. у тебя DI головного мозга детектед. Ты даже пример привёл такой, где DI нафиг не втоптался. Ну вот вообще, от его применения может быть только хуже. Живёшь в мире розового сопливого волшебства: области оберегают от утечек — это надо в книгу коллекция заблуждений джуниоров. Регистрация по соглашениям. Экономия на присваивании свойств. Атрибуты это ещё куда ни шло, но соглашения это ещё более слабое правило. Пойди найди потом правильную имплементацию зависимости. Скажи, а зачем вообще тогда зависимости? Почему бы не получать имплементацию с помощью поиска класса по имени и активацию его через рефлешкен? По сути, разницы нет. Такое ощущение, что ты не код пишешь, а батрачишь задарма :) Голову включай и вылазь из судорга. Серебряной пули не существует. Всё хорошо в меру. Алексей КПросто ты в очередной раз удивляешь своим идеализмом. Вот как раз я против идеализма, если ты не заметил. Я не говорю, что DI — зло. Я говорю, что повальное фанатичное увлечение этим у программистов (да это касается чего угодно другого) — зло. Я бы так не говорил касательно DI, если бы своими глазами не видел загубленных проектов, где сплошь один DI, почти любой класс инстанцируется исключительно из контейнера, доходит до маразма. Хотя и без маразма уже мрак. Но ты оставайся при своём мнении, у меня нет цели тебя в чём-то убедить. Возможно сам всё поймёшь когда-нибудь. А возможно и нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 10:13 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
hVostt, вы бы не были голословным, и не переходили бы на личности. сделайте проще - приведите пример плохого дизайна с использованием DI и хорошего без него. ну говнокод с DI (пример) и без него (идеальный код). ждем-с. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 10:31 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
hVosttВот как раз я против идеализма, если ты не заметил.Я вот что заметил:hVosttЖелательно обходиться без DI там где это можно — максимально. Если что-то делается только внутри одного модуля и не выходит наружу, то в таких случаях лучше вообще избегать использования контейнера.Knockout плохой, Bootstrap ещё хуже, DI можно использовать только для модульности. Я ничего не забыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 10:57 |
|
Dependency injection. Как скрыть внутренние реализации ?
|
|||
---|---|---|---|
#18+
hVosttАтрибуты это ещё куда ни шло, но соглашения это ещё более слабое правило.Соглашения в EF code-first тобой любимы, а здесь нет. Что за двойные стандарты? Код: c# 1. 2. 3. 4. 5. 6.
hVosttПойди найди потом правильную имплементацию зависимости. Скажи, а зачем вообще тогда зависимости? Почему бы не получать имплементацию с помощью поиска класса по имени и активацию его через рефлешкен? По сути, разницы нет.Давай напишем свою реализацию ID-контейнера? Готовые решения нас не устраивают? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 11:08 |
|
|
start [/forum/topic.php?fid=20&msg=39288667&tid=1400408]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 139ms |
0 / 0 |