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

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

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

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

25 ответов

21 просмотр
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.
Но в пайтоне это все почти не работает))

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта