170 похожих чатов

Коллеги, правильно ли реализовал код по принципу инверсии зависимости? https://github.com/Khanze99/language_python_lessons/blob/main/solid/DIP/1.py Задача была

в том, чтобы разделить зависимость, не ссылаться на конкретные классы, не наследовать их.

А то как-то сомнительно немного.

25 ответов

20 просмотров
Anvar-Khamidov Автор вопроса

Ну, в задаче, Application использует конкретную реализацию ConcreteImpl, через интерфейс Service. 1. IServiceFactory так и есть в коде, по неймингу 2. тут поправил, в общем и целом make_svc - создает экземпляр ConcreteImpl и возвращает его как экземпляр интерфейса Service Немного поменял: https://github.com/Khanze99/language_python_lessons/blob/main/solid/DIP/1.py

Anvar Khamidov
Ну, в задаче, Application использует конкретную ре...

Добавь аннотации типа результата для make_svc

Anvar Khamidov
добавил

не везде добавил

Anvar-Khamidov Автор вопроса
Tishka17
не везде добавил

в абстрактном методе нужно что-то аннотировать? только эти методы по сути есть

Anvar Khamidov
в абстрактном методе нужно что-то аннотировать? то...

Абстрактный метод нужен для того чтобы понимать что он делает, что возвращает и зачем нужен. Аннотации нужны

Anvar-Khamidov Автор вопроса
Tishka17
Абстрактный метод нужен для того чтобы понимать чт...

А если в разных реализация этого метода в разных классах будут разное возвращения экземпляров, но родитель у них один? Тогда в абстрактный добавить родителя этих конкретных реализаций?

Anvar Khamidov
А если в разных реализация этого метода в разных к...

давай ты эти все фабрки выикнешь и начнешь с простого вопроса: что нужно Application чтобы он работал?

Anvar-Khamidov Автор вопроса
Tishka17
давай ты эти все фабрки выикнешь и начнешь с прост...

Ну, в принципе асбтрактно, из книги "Чистая архитектура" тема Принцип инверсии зависимости. Но давай попробуем. Application использует конкретную реализацию ConcreteImpl через интерфейс IService. Вот в принципе первое условие.

попробуем с другой стороны - зачем тебе знать что объект имеет тип ConrecteImpl?

Anvar-Khamidov Автор вопроса
Tishka17
попробуем с другой стороны - зачем тебе знать что ...

Наверное потому что: 1. имеет конкретную какую-то реализацию 2. не зависеть конкретно от IService, по принципу DIP

Anvar Khamidov
Наверное потому что: 1. имеет конкретную какую-то ...

зачем тебе знать какая именно реализация сделана? реализация чего вообще? как не зависить от IService, если ты сам выбрал вариант в

Anvar-Khamidov Автор вопроса
Tishka17
зачем тебе знать какая именно реализация сделана? ...

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

Anvar Khamidov
пока сам короче походу не догнал. Но суть в чем, п...

прежде чем инвертировать заивисимость надо понять что является зависимостью

Anvar-Khamidov Автор вопроса
Tishka17
прежде чем инвертировать заивисимость надо понять ...

В нашем случае, зависимость - это IService?, ConcreteImpl использовали походу для того чтобы абстрагировать, зачем , не могу сказать

Смотри. Классу Application нужно чтобы объект умел делать какие-то вещи. Для описания, что умеет объект придумали интерфейсы. Они не содержат реализации, только описание. Описываем интерфейс, содержащий нужные методы. Допустим IService. Таким образом получаем что классу Application нужен экземпляр IService. Например, пусть у него будет атрибут типа IService. Инверсия зависимости заключается в том, что если класс от чего-то зависит он не сам это создает, а получает зависимость снаружи. Таким образом, Application должен получить экземпляр IService в ините и сохраняет в атрибут Интерфейс сам по себе ничего не умеет, его нужно реализовать. Получаем класс ConcreteImpl. Дальше если нам нужен Application, у него есть зависимость IService и её тоже надо создать. Создаем экземпляр какой-нибудь реализации интерфейса. Например ConcreteImpl и создаем Application передавая этот объект.

Anvar-Khamidov Автор вопроса
Tishka17
Смотри. Классу Application нужно чтобы объект умел...

хмм, начинаю догонять, запишу. Спасибо!

Anvar-Khamidov Автор вопроса
Tishka17
банду четырех читал?

В процессе. Советовали принципы SOLID и + банду четырех, решил после SOLID продолжить читать.

Tishka17
Смотри. Классу Application нужно чтобы объект умел...

Но в пайтоне это все почти не работает))

Ivan K.
Но в пайтоне это все почти не работает))

сильное заявление. ты фронтендер?

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта