Pull to refresh
0
0
Send message

Будет круто, если добавишь информации:

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 так и остаются интерфейсами/протоколами с одной имплементацией:

class TokenRepo(Protocol):
    async def get_user_by_token(self, token: str) -> str | None:
        ...

    async def set_user_token(self, token: str, username: str) -> None:
        ...


Т.е. если в теории - канеш интерфейсы то сё имплементации Роберт Мартин солид красота.
А практике у нас лишние файлы и протоколы никому не нужные (возможностей не добавляют, код читать не помогают). Опять же - кроме случаев, когда вариативность инжектируемого объекта нужна в проде.

чел, ты хорош и сложности с DI в fastapi довольно точно подметил.

но у тебя в статье:

> Так вот: помним, что в DI нам нужно завязывать на абстракцию

Вот это откуда? этого ведь ни в торе, ни конституции ни в здравом смысле нет.
Зачем смешивать DI и всякие IoCи и прочие "зависим от абстракции"?

DI сам по себе вполне справляется как в сочетании с абстрациями, так и без - миллион юзеров spring в джаве инжектящих свои классы не дадут соврать.

Кофейня в штаб-квартире Twitter. Маск проверяет распечатки исходников у разработчиков Twitter.

Например, можно вот так:

{
  users: [ {..., "areaId": 148, ...} ]  
   areasById: {..., "148": {"name": "Москва Москва Златые Купола"}, ...}
} 

Information

Rating
Does not participate
Registered
Activity