powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Dependency injection. Как скрыть внутренние реализации ?
8 сообщений из 58, страница 3 из 3
Dependency injection. Как скрыть внутренние реализации ?
    #39288662
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
DI может существовать и быть полезным без IoC, не так ли?

http://sergeyteplyakov.blogspot.ru/2014/11/di-vs-dip-vs-ioc.html авторЧерез свойства должны устанавливаться лишь необязательные зависимости (обычно, инфраструктурные), для которых существует значение по умолчанию (свойство Logger содержит разумное значение по умолчанию, но может быть заменено позднее). Автор забыл сказать о том, что через свойства устанавливаются циклические зависимости, в том числе и обязательные.
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288667
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНиже пример из жизни, чего можно избежать при использовании ди-контейнера:

В твоём коде всё понятно, что откуда берётся, когда создаётся, ты привёл самый обычный фабричный метод.

Есть говорить о контексте применения, то как раз инсталлятор должен конфигурироваться централизовано. Не самый удачный пример в подтверждение твоих мыслей.


Алексей К1. Области времени жизни.
2. Централизованное конфигурирование создания объектов.
3. Компактность кода.

1. Есть и обратная сторона, когда у тебя контекст времени жизни ясен и очевиден это одно. Другое, когда время жизни зависит от объекта, который использует зависимость. Один берёт попользоваться, другой хочет забрать себе и отдать тогда, когда сам решит. Лишь в теории и на студенческих примерах всё круто. И да, очень часто злоупотребление DI приводит к утечкам памяти или к нерациональной утилизации ресурсов.

2. Бутстраперы это хорошо, но знаешь в чём подвох? Когда-нибудь программисту надоедать регистрировать всё вручную. Это обязательно наступит рано или поздно. И тогда он захочет автоматическую регистрацию всех компонентов с помощью атрибутов. И вот тогда свой пункт 2 можешь смело вычеркнуть, как не имеющий отношения к реальности.

3. Создание дополнительного уровня косвенности никогда не приводит к компактности кода. Наоборот. Просто ты переносишь создание из одного места в другое. Проблему создания объектов решает не только DI, есть другие способы. К слову.

Если тебя я правильно понял. То ты пропагандируешь идёю: в топку остальные решения, только DI?
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288668
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОт наличия или отсутствия ди-контейнера плохой код лучше не станет.

Говоря о плохом коде, надо говорить о всех аспектов того, почему он плохой. Злоупотребление DI -- один из многих аспектов.
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288672
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КНиже пример из жизни, чего можно избежать при использовании ди-контейнера:

В твоём коде всё понятно, что откуда берётся, когда создаётся, ты привёл самый обычный фабричный метод.Которого могло не быть, если бы использовался диконтейнер.
hVosttЕсть говорить о контексте применения, то как раз инсталлятор должен конфигурироваться централизовано. Не самый удачный пример в подтверждение твоих мыслей.Данный проект не столь масштабен, чтобы использовать диконтейнер, поэтому он не использован. Но пример показателен.

hVosttАлексей К1. Области времени жизни.
2. Централизованное конфигурирование создания объектов.
3. Компактность кода.

1. Есть и обратная сторона, когда у тебя контекст времени жизни ясен и очевиден это одно. Другое, когда время жизни зависит от объекта, который использует зависимость. Один берёт попользоваться, другой хочет забрать себе и отдать тогда, когда сам решит. Лишь в теории и на студенческих примерах всё круто. И да, очень часто злоупотребление DI приводит к утечкам памяти или к нерациональной утилизации ресурсов.Нет. Области оберегают от утечек ресурсов. В том числе для этого они и придуманы.

hVostt2. Бутстраперы это хорошо, но знаешь в чём подвох? Когда-нибудь программисту надоедать регистрировать всё вручную. Это обязательно наступит рано или поздно. И тогда он захочет автоматическую регистрацию всех компонентов с помощью атрибутов. И вот тогда свой пункт 2 можешь смело вычеркнуть, как не имеющий отношения к реальности.Кроме атрибутов ещё бывают соглашения, которые отлично работают в прикладном коде.

hVostt3. Создание дополнительного уровня косвенности никогда не приводит к компактности кода. Наоборот. Просто ты переносишь создание из одного места в другое. Проблему создания объектов решает не только DI, есть другие способы. К слову.Какие ещё "косвенности"? Тупо экономим на фабричных методах и присваиваниях свойств или вызовах конструкторов. Пример приведён выше.

hVosttЕсли тебя я правильно понял. То ты пропагандируешь идёю: в топку остальные решения, только DI? Я никогда ничего не пропагандирую. Просто ты в очередной раз удивляешь своим идеализмом.
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288732
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Очень не хотелось этого говорить, но.. у тебя DI головного мозга детектед.

Ты даже пример привёл такой, где DI нафиг не втоптался. Ну вот вообще, от его применения может быть только хуже. Живёшь в мире розового сопливого волшебства: области оберегают от утечек — это надо в книгу коллекция заблуждений джуниоров. Регистрация по соглашениям. Экономия на присваивании свойств.

Атрибуты это ещё куда ни шло, но соглашения это ещё более слабое правило. Пойди найди потом правильную имплементацию зависимости. Скажи, а зачем вообще тогда зависимости? Почему бы не получать имплементацию с помощью поиска класса по имени и активацию его через рефлешкен? По сути, разницы нет.

Такое ощущение, что ты не код пишешь, а батрачишь задарма :) Голову включай и вылазь из судорга. Серебряной пули не существует. Всё хорошо в меру.


Алексей КПросто ты в очередной раз удивляешь своим идеализмом.

Вот как раз я против идеализма, если ты не заметил. Я не говорю, что DI — зло. Я говорю, что повальное фанатичное увлечение этим у программистов (да это касается чего угодно другого)  — зло.

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

Но ты оставайся при своём мнении, у меня нет цели тебя в чём-то убедить. Возможно сам всё поймёшь когда-нибудь. А возможно и нет.
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288745
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

вы бы не были голословным, и не переходили бы на личности. сделайте проще - приведите пример плохого дизайна с использованием DI и хорошего без него. ну говнокод с DI (пример) и без него (идеальный код).
ждем-с.
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288765
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВот как раз я против идеализма, если ты не заметил.Я вот что заметил:hVosttЖелательно обходиться без DI там где это можно — максимально. Если что-то делается только внутри одного модуля и не выходит наружу, то в таких случаях лучше вообще избегать использования контейнера.Knockout плохой, Bootstrap ещё хуже, DI можно использовать только для модульности. Я ничего не забыл?
...
Рейтинг: 0 / 0
Dependency injection. Как скрыть внутренние реализации ?
    #39288770
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАтрибуты это ещё куда ни шло, но соглашения это ещё более слабое правило.Соглашения в EF code-first тобой любимы, а здесь нет. Что за двойные стандарты?
Код: c#
1.
2.
3.
4.
5.
6.
builder
    .RegisterTypes(/*тут все типы из сборки, имена которых оканчиваются на Service*/)
    .AsSelf()
    .AsImplementedInterfaces()
    .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies)
    .InstancePerLifetimeScope();


hVosttПойди найди потом правильную имплементацию зависимости. Скажи, а зачем вообще тогда зависимости? Почему бы не получать имплементацию с помощью поиска класса по имени и активацию его через рефлешкен? По сути, разницы нет.Давай напишем свою реализацию ID-контейнера? Готовые решения нас не устраивают?
...
Рейтинг: 0 / 0
8 сообщений из 58, страница 3 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Dependency injection. Как скрыть внутренние реализации ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]