Сообщение Re[2]: О "наивном" DI и об архитектурном бессилии от 29.07.2016 7:26
Изменено 29.07.2016 7:33 IQuerist
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, IQuerist, Вы писали:
IQ>>Ребята... вот эта низкоуровневая "требуха" это что ли "сервис"? Вот эти все "внутренности наружу" это инкапсуляция и архитектура?
S>Как мне кажется, этот момент — следствие попытки натянуть "классический" DI на все остальные области. Классический — это который пошёл от тяжёлых продуктов с продвинутым public API и поддержкой плагинов от сторонних разработчиков. Вот там возможность подсунуть нужные сервисы в код минимумом телодвижений — то, что надо.
Да так и есть "наивный DI" в ограниченном инструменте видят решение.
S>К сожалению, DI в чистом виде абсолютно непригоден для использования в тяжёлом биз-коде. Там от DI требуется не закинуть сервисы и отдать объект, а способ протащить эти сервисы по длиннющей цепочке вызовов, причём состав зависимостей часто заранее неизвестен и определяется в рантайме. Для дотнета обсуждали вот тут
Да... протащить контекст по длиннющей цепочке бизнес решений. Поэтому хорошая декомпозиция там жизненно важна.
IQ>>Часть знакомых уверяла, что DI жизненно необходим для тестирования, но тут ситуация становилась совсем абсурдной, т.к. архитектурное решение (использовать DI) вроде как принималось, но никаких тестов при этом не было и в будущем они никогда не появлялись.
S>Вот да-да-да. На практике DI сам по себе никак не помогает и не упрощает процесс тестирования. Сложный код с полудесятком зависимостей одинаково неприятно покрывать тестами, что с DI, что без. Простой вообще не должен требовать DI для тестов
IQ>>Как-то так... имхо главная начальная проблема DI — неспособность разработчиков создавать объектные декомпозиции.
S>+1, только я бы немного по-другому сформулировал. Фраза "я добавил возможность" на уровне архитектуры на самом деле означает "теперь нам всем придётся это использовать". Сам по себе DI экономит кучу времени, но только до момента, когда он не вылезает из своей родной ниши. После этого лучше смотреть в сторону других инструментов.
S>UPD, P.S. Не стоит налегать на SOLID как на аргумент в спорах. Его к сожалению воспринимают как волшебную палочку, хотя на практике подход "потому что SOLID" работает не лучше, чем самолёт из культа карго. Голову никто не отменял
Так ведь часто использование DI только этим самым SOLID и объясняют. Мол нам позарез надо уменьшить зависимость иначе не по SOLID, иначе опять получится говнокод.
Хм... неплохой мем — внедрение Colonoscopy Injection не влияет на количество говнокода, оно лишь добавляет посторонние предметы
S>Здравствуйте, IQuerist, Вы писали:
IQ>>Ребята... вот эта низкоуровневая "требуха" это что ли "сервис"? Вот эти все "внутренности наружу" это инкапсуляция и архитектура?
S>Как мне кажется, этот момент — следствие попытки натянуть "классический" DI на все остальные области. Классический — это который пошёл от тяжёлых продуктов с продвинутым public API и поддержкой плагинов от сторонних разработчиков. Вот там возможность подсунуть нужные сервисы в код минимумом телодвижений — то, что надо.
Да так и есть "наивный DI" в ограниченном инструменте видят решение.
S>К сожалению, DI в чистом виде абсолютно непригоден для использования в тяжёлом биз-коде. Там от DI требуется не закинуть сервисы и отдать объект, а способ протащить эти сервисы по длиннющей цепочке вызовов, причём состав зависимостей часто заранее неизвестен и определяется в рантайме. Для дотнета обсуждали вот тут
Автор: LWhisper
Дата: 30.05.16
.Дата: 30.05.16
Да... протащить контекст по длиннющей цепочке бизнес решений. Поэтому хорошая декомпозиция там жизненно важна.
IQ>>Часть знакомых уверяла, что DI жизненно необходим для тестирования, но тут ситуация становилась совсем абсурдной, т.к. архитектурное решение (использовать DI) вроде как принималось, но никаких тестов при этом не было и в будущем они никогда не появлялись.
S>Вот да-да-да. На практике DI сам по себе никак не помогает и не упрощает процесс тестирования. Сложный код с полудесятком зависимостей одинаково неприятно покрывать тестами, что с DI, что без. Простой вообще не должен требовать DI для тестов
IQ>>Как-то так... имхо главная начальная проблема DI — неспособность разработчиков создавать объектные декомпозиции.
S>+1, только я бы немного по-другому сформулировал. Фраза "я добавил возможность" на уровне архитектуры на самом деле означает "теперь нам всем придётся это использовать". Сам по себе DI экономит кучу времени, но только до момента, когда он не вылезает из своей родной ниши. После этого лучше смотреть в сторону других инструментов.
S>UPD, P.S. Не стоит налегать на SOLID как на аргумент в спорах. Его к сожалению воспринимают как волшебную палочку, хотя на практике подход "потому что SOLID" работает не лучше, чем самолёт из культа карго. Голову никто не отменял
Так ведь часто использование DI только этим самым SOLID и объясняют. Мол нам позарез надо уменьшить зависимость иначе не по SOLID, иначе опять получится говнокод.
Хм... неплохой мем — внедрение Colonoscopy Injection не влияет на количество говнокода, оно лишь добавляет посторонние предметы
Re[2]: О "наивном" DI и об архитектурном бессилии
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, IQuerist, Вы писали:
IQ>>Ребята... вот эта низкоуровневая "требуха" это что ли "сервис"? Вот эти все "внутренности наружу" это инкапсуляция и архитектура?
S>Как мне кажется, этот момент — следствие попытки натянуть "классический" DI на все остальные области.
Да, это и есть "наивный DI". В ограниченном инструменте видят решение.
S>К сожалению, DI в чистом виде абсолютно непригоден для использования в тяжёлом биз-коде. Там от DI требуется не закинуть сервисы и отдать объект, а способ протащить эти сервисы по длиннющей цепочке вызовов, причём состав зависимостей часто заранее неизвестен и определяется в рантайме. Для дотнета обсуждали вот тут
Да... протащить контекст по длиннющей цепочке бизнес решений. Поэтому хорошая декомпозиция там жизненно важна.
S>UPD, P.S. Не стоит налегать на SOLID как на аргумент в спорах. Его к сожалению воспринимают как волшебную палочку, хотя на практике подход "потому что SOLID" работает не лучше, чем самолёт из культа карго. Голову никто не отменял
Так ведь часто использование DI только этим самым SOLID и объясняют. Мол нам позарез надо уменьшить зависимость иначе не по SOLID, иначе опять получится говнокод.
Хм... неплохой мем — внедрение Colonoscopy Injection не влияет на количество говнокода, оно лишь добавляет посторонние предметы
S>Здравствуйте, IQuerist, Вы писали:
IQ>>Ребята... вот эта низкоуровневая "требуха" это что ли "сервис"? Вот эти все "внутренности наружу" это инкапсуляция и архитектура?
S>Как мне кажется, этот момент — следствие попытки натянуть "классический" DI на все остальные области.
Да, это и есть "наивный DI". В ограниченном инструменте видят решение.
S>К сожалению, DI в чистом виде абсолютно непригоден для использования в тяжёлом биз-коде. Там от DI требуется не закинуть сервисы и отдать объект, а способ протащить эти сервисы по длиннющей цепочке вызовов, причём состав зависимостей часто заранее неизвестен и определяется в рантайме. Для дотнета обсуждали вот тут
Автор: LWhisper
Дата: 30.05.16
.Дата: 30.05.16
Да... протащить контекст по длиннющей цепочке бизнес решений. Поэтому хорошая декомпозиция там жизненно важна.
S>UPD, P.S. Не стоит налегать на SOLID как на аргумент в спорах. Его к сожалению воспринимают как волшебную палочку, хотя на практике подход "потому что SOLID" работает не лучше, чем самолёт из культа карго. Голову никто не отменял
Так ведь часто использование DI только этим самым SOLID и объясняют. Мол нам позарез надо уменьшить зависимость иначе не по SOLID, иначе опять получится говнокод.
Хм... неплохой мем — внедрение Colonoscopy Injection не влияет на количество говнокода, оно лишь добавляет посторонние предметы