1) Где храните описание самих flink-job связанных с конкретной обработкой чего-то: а) все джобы в одном репозитории; б) под каждую джобу свой репозиторий; в) джобы лежат где-то рядом с кодом сервисов, отвечающих за функциональность, которую джоба обрабатывает?
2) Что конкретно делают flink-job-ы: откуда берут данные, куда записывают? Если kafka->flink->kafka - нет ли проблемы, что на первом запуске нужно получить какие-то данные из истории событий, которых в kafka уже нет из-за retention?
3) Получается, в версии с K8S все кластера работают в режиме Application или режим Session всё-еще используете?
4) Сколько времени внедрение заняло, сколько человек над ним работало?
Ну правда в том, что такое нужно, если подмена инжектируемого объекта нужна в продакшен коде (например, когда у тебя приложение рассчитывает уметь запускаться на разных базах - и речь не про "когда-то в будущем поменяем базу" - тут как раз снова становится бессмысленно - в будещем старую имлементацию удалишь, новую заюзаешь)
А если речь про подмену имплементации в тестах - то современные тестовые фреймворки вполне себе справляются с мокированием даже без наличия интерфейсов. Даже правильней сказать - странно выглядит ради теста писать какую-то сложную отдельную имплементацию, а не сделать обычный мок и определить ему нужное поведение где-то рядом с тестом либо сразу для всех тестов.
В итоге все эти TokenRepo так и остаются интерфейсами/протоколами с одной имплементацией:
Т.е. если в теории - канеш интерфейсы то сё имплементации Роберт Мартин солид красота. А практике у нас лишние файлы и протоколы никому не нужные (возможностей не добавляют, код читать не помогают). Опять же - кроме случаев, когда вариативность инжектируемого объекта нужна в проде.
Будет круто, если добавишь информации:
1) Где храните описание самих flink-job связанных с конкретной обработкой чего-то:
а) все джобы в одном репозитории;
б) под каждую джобу свой репозиторий;
в) джобы лежат где-то рядом с кодом сервисов, отвечающих за функциональность, которую джоба обрабатывает?
2) Что конкретно делают flink-job-ы: откуда берут данные, куда записывают? Если kafka->flink->kafka - нет ли проблемы, что на первом запуске нужно получить какие-то данные из истории событий, которых в kafka уже нет из-за retention?
3) Получается, в версии с K8S все кластера работают в режиме Application или режим Session всё-еще используете?
4) Сколько времени внедрение заняло, сколько человек над ним работало?
У тебя вот тут память не утекает?
https://github.com/GVCoder09/NoDPI/blob/main/src/main.py#L300-L308
Не видно, где бы удалялись из списка таски для уже отработавших соединений
Ну правда в том, что такое нужно, если подмена инжектируемого объекта нужна в продакшен коде (например, когда у тебя приложение рассчитывает уметь запускаться на разных базах - и речь не про "когда-то в будущем поменяем базу" - тут как раз снова становится бессмысленно - в будещем старую имлементацию удалишь, новую заюзаешь)
А если речь про подмену имплементации в тестах - то современные тестовые фреймворки вполне себе справляются с мокированием даже без наличия интерфейсов.
Даже правильней сказать - странно выглядит ради теста писать какую-то сложную отдельную имплементацию, а не сделать обычный мок и определить ему нужное поведение где-то рядом с тестом либо сразу для всех тестов.
В итоге все эти TokenRepo так и остаются интерфейсами/протоколами с одной имплементацией:
Т.е. если в теории - канеш интерфейсы то сё имплементации Роберт Мартин солид красота.
А практике у нас лишние файлы и протоколы никому не нужные (возможностей не добавляют, код читать не помогают). Опять же - кроме случаев, когда вариативность инжектируемого объекта нужна в проде.
чел, ты хорош и сложности с DI в fastapi довольно точно подметил.
но у тебя в статье:
> Так вот: помним, что в DI нам нужно завязывать на абстракцию
Вот это откуда? этого ведь ни в торе, ни конституции ни в здравом смысле нет.
Зачем смешивать DI и всякие IoCи и прочие "зависим от абстракции"?
DI сам по себе вполне справляется как в сочетании с абстрациями, так и без - миллион юзеров spring в джаве инжектящих свои классы не дадут соврать.
Например, можно вот так: