|
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
|
|
[Dependency Inversion] Детали должны зависить от абстракций16.04.2020, 14:55. Показов 2044. Ответов 7
Метки нет (Все метки)
Про какую зависимость здесь идет речь? Что классы в идеале должны реализовывать какой-то интерфейс, чтобы подобные классы потом можно было заменять друг-другом в каком-то более high-level модуле?
Как по мне, немного странная формулировка, т.к для меня "детали/деталь" это уже имплементация какой-то абстракции. Было бы правильнее сказать, что классы впринципе должны зависить от какой-то абстракции если бизнес логика подразумевает наличие подобных классов с немного другой реализацией?
0
|
|
| 16.04.2020, 14:55 | |
|
Ответы с готовыми решениями:
7
Inversion Of Control и Dependency Inversion Principle - в чем отличие?
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
|
|||||||||||||||||
| 16.04.2020, 18:34 | |||||||||||||||||
|
Например, у тебя есть класс
serialize_to_string «статично» зависит от формата. Если мы захотим сериализовать объект person_a, например в JSON, то нужно будет писать новый метод. И ещё метод для XML. И ещё кучу методов для всех возможных форматов. Кроме большого количества кода мы получим, что класс person_a зависит от кучи других классов и библиотек. И так для всех остальных классов в нашем модуле.Чтобы упростить архитектуру и сделать её более гибкой, мы абстрагируемся от формата:
person_b зависит только от обощённого интерфейса format : property list -> string. А разные реализации этого интерфейса мы выносим в отдельные модули/классы/функции:
person_b. Но различные модули/классы/функции форматирования теперь зависят от нашего интерфейса format. Эти зависимость называются инвертированными (обратными).https://ideone.com/NNSVhS
1
|
|||||||||||||||||
|
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
|
|
| 17.04.2020, 10:16 [ТС] | |
|
korvin_, то есть под деталями мы подразумеваем, в данном случае, реализацию какого-то метода класса? И что методы должны принимать как параметр абстракции вместо конкретных имплементаций? Тоже самое получается и с конструкторами класса(предпочитать абстракции)?
Тогда во фразе "Abstractions should not depend on details" мы, получается, всего лишь подразумеваем что интерфейсы/абстрактные классы тоже должны програмироваться(параметры методов) на такие же интерфейсы/абстрактные классы а не на имплементации. И все? Не по теме: Btw, делайте как считаете нужным, но, имхо, код на языке, на котором почти никто не пишет здесь на форуме только усложняет понимание, т.к тебе дополнительно нужно гуглить конструкции этого языка и привыкать к новому код стайлу(с последнего сниппета вообще уехал). Уверен, многие бы были благодарны если в будущем сниппеты бы были на Java/C#/JS/C++ или на другом популярном языке.
0
|
|
| 17.04.2020, 10:36 | |||||||
|
Не по теме:
0
|
|||||||
| 17.04.2020, 10:45 [ТС] | ||
|
Не по теме:
Я же написал с точки зрения начинающего и неискушенного пользователя, которых на форуме явно больше, чем опытных. Я не могу сказать, что код на незнакомом мне языке, поспособствовал моему размышлению о сути. Наоборот, если бы это было оформленно в виде java классов, я бы понял это гораздо быстрее, несмотря на то, что кода вроде как больше.
0
|
||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,765
|
|||||||||||||||||||||||||||||||||||||||||||||
| 17.04.2020, 12:05 | |||||||||||||||||||||||||||||||||||||||||||||
|
Вот тебе пример на Java:
Demo
Добавлено через 1 минуту
1
|
|||||||||||||||||||||||||||||||||||||||||||||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||
| 17.04.2020, 16:59 | ||
Сообщение было отмечено Artmal как решение
РешениеКонкретные классы должны зависеть от интерфейсов и не должны зависеть от других конкретных классов. (Разумеется, имеются ввиду конкретные классы, решающие разные, несвязанные задачи). Это универсальный принцип, который применяется не только к классам в ООП. Например, Ваша программа использует некую библиотеку для логирования. Она не должна зависеть от выбранной библиотеки. То есть, в коде не должны встречаться строки вида "var logger = new SomeLogger();". В Вашем проекте вообще не должно быть ссылки на эту библиотеку (длл, модуль и т.п.) . Это правило, очевидно, не распространяется на "конфигурационный" код, но весь такой код (если он есть) должен быть собран в одном месте.
1
|
||
|
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
|
||
| 18.04.2020, 13:14 [ТС] | ||
|
Резюмируя топик:
Всем спасибо.
0
|
||
| 18.04.2020, 13:14 | |
|
Помогаю со студенческими работами здесь
8
ASP.NET MVC - Inversion of Control В поисках совершенных абстракций Посоветуйте литературу по выполнению прямоугольной изометрии детали, эскиза детали В поле данные не должны превышать значения другого поля и должны быть не менее 0 Найти вероятность отказа узла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|