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

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

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

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

25 ответов

16 просмотров
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 нужно чтобы объект умел...

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

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта