• Как правильно писать сущности в доменном слое для разных юс-кейсов?

    @No_name451 Автор вопроса
    Благодарю за комментарий!

    С этим:
    Use Case - это какой-то бизнес сценарий, состоящий из от 1 до n шагов.

    согласен и даже добавлю - юс кейс не обязан включать в себя функционал по изменению состояния системы.

    При этом - формирование отчета может проходить далеко не только на стороне БД + иметь под собой n-шагов.
    Например:
    Шаг 1: Забравть сырые данные, без условий выборки забрать из БД средствами SQL/NoSQL
    Шаг 2: Пропустить их через сложную/хитрую обработку, которую не возможно реализовать на стороне БД (и вполне вероятно что этого не нужно делать)
    Шаг 3: Конвертировать проанализированные данные в требуемый выходной формат (xlsx/json/pdf/...)
    Шаг 4: Оповестить пользователя/другую систему/... что работа завершена

    Для справки:
    Data Lake/Warehouse идут рука-об-руку с шагами 1, 2. Но там все посложнее и имеет свою специфику:)


    Еще я не понимаю, к чему эти противоречивые тейки...
    Вначале ты говоришь это:
    То, что, как мне показалось, ты описываешь, это - "Interactor" a.k.a Паттерн "Command", он и является шагом юзкейса.

    После - это:
    Это непохоже на interactor, interactor как-то меняет состояние системы, а это просто получение данных

    Зачем и о чем это?..

    при этом нужно помнить о перфомансе - тянуть все поля абсолютно во всех юс-кейсах не правильно

    Это абсолютно нормально. Если ты будешь делать описанные тобой костыли, ты не получишь буста по перфоманусу, т.к это экономия на спичках, зато получишь код, который сложно будет поддерживать.


    Ага, тянуть абсолютно все поля - нормально... Я тебя понял:)

    Теперь к:
    Open–closed principle вообще никак не связан с тем, что ты описал.

    Как раз таки связан.

    Я описал 2 возможных варианта решения сложившейся ситуации, которые мне с ходу пришли в голову.
    Также, прошу заметить, что я нигде не говорил о том, что эти 2 варианта являются production-ready решениями.
    Это плохие примеры решений 'в лоб', как раз нацеленные на то чтобы дать будущему комментатору больше контекста -
    что я действительно не знаю как решить эту ситуацию 'красиво'/'правильно'/production-ready и поэтому прошу помощи.

    И так, принцип Open–closed principle связан с примером, где поястоянно вносятся изменения в один класс (для атрибутов задается значение по умолчанию, равное Null/None/...), из-за того что появляются новые юс-кейсы со своими потребностями.

    Если интересно почитать про то, как организовывать доменную модель, советвую почитать "Шаблоны корпоративных приложений. Мартина Фаулера" и что-нибудь про DDD.

    Спасибо за предложение.
    Первую книгу я почти прочитал, с паттернами для работы с бизнес-логикой я знаком.
    Про DDD - Эванса намеренно не стал читать. Прочитал Вернона - Domain-Driven Design Distilled, Влада - Learning Domain-Driven Design.
    Там (как и большинстве технической литературы) явного ответа как поступать в таких кейсах - нет.

    И вот у меня назрел вопрос - как реализовать класс под какую-то сущность в доменном слое, если эта сущность используется во многих юс-кейсах,

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


    Спасибо. Тоже об этом думал, но если в доменная сущность претерпит какие-то сильные/глобальные измения - эти измения небохдоимо применить во всех местах, где это потребуется.
    То есть потенциально, при таком подходе - таких мест будет больше.
    А уже это - потенциально может привести к ситуации где не всё привели в ожидаемый вид - то есть допустили ошибку из-за человеческого фактора.
    Да и про DRY думаю стоит помнить, когда для двух разных юс-кейсов, но со схожим атрибутивным составом на процентов 60-70 будет писаться 2 разных доменных модели.
    Написано
  • Почему не работает нормально DNS при подключении к сети в Ubuntu 20.04.3 LTS?

    @No_name451 Автор вопроса
    AlexVWill, соединение все равно было медленным, хоть и работало.
    В действительности - образ докера проксировал соединение.
    Вот оно заняло ip 192.168.0.1:
    {
    	"Name": "oracle_default",
    	"Id": "b0319c782cb2bf18bfe5e60dc2757b0d263866e3a7a391483bda3f183b9da9e1",
    	"Created": "2022-04-04T16:09:11.751232562+05:00",
    	"Scope": "local",
    	"Driver": "bridge",
    	"EnableIPv6": false,
    	"IPAM": {
    		"Driver": "default",
    		"Options": null,
    		"Config": [
    			{
    				"Subnet": "192.168.0.0/20",
    				"Gateway": "192.168.0.1"
    			}
    		]
    	},
    	"Internal": false,
    	"Attachable": true,
    	"Ingress": false,
    	"ConfigFrom": {
    		"Network": ""
    	},
    	"ConfigOnly": false,
    	"Containers": {},
    	"Options": {},
    	"Labels": {
    		"com.docker.compose.network": "default",
    		"com.docker.compose.project": "oracle",
    		"com.docker.compose.version": "1.29.2"
    	}
    }

    И при попытке перейти на страницу с настройкой роутера - я попадал на этот ip, где меня встречал nginx)
    Тык

    6250455f46926961836641.png


    Пс, как раз ip 169.254.0.0 с приоритетом в 1000 и было сетью этого образа
  • Почему не работает нормально DNS при подключении к сети в Ubuntu 20.04.3 LTS?

    @No_name451 Автор вопроса
    AlexVWill, уже подропал сети докера... При сносе компоуза как я понял остаются некоторые сети, если что-то пошло не так)
  • Почему не работает нормально DNS при подключении к сети в Ubuntu 20.04.3 LTS?

    @No_name451 Автор вопроса
    AlexVWill, на счет скринов понял, учту.
    Действительно, сменил приоритет - работает как надо. Огромное спасибо! Уже часов 5 боролся с этим...
  • Почему не работает нормально DNS при подключении к сети в Ubuntu 20.04.3 LTS?

    @No_name451 Автор вопроса
    traceroute google.com
    Скрин

    625023a6a9df4315081793.png

    ip route
    sudo ip xfrm policy # - ничего не выдало

    Скрин

    625023ca7ad97892060942.png
  • Почему pyenv не активирует среду с новым интерпритатором python (Ubuntu 20.04.3 LTS)?

    @No_name451 Автор вопроса
    Ivan, не за что) сам на это убил около 3-4 часов, помог комментарий индуса в каком-то тренде на 4 странице Гугла...
  • Почему pyenv не активирует среду с новым интерпритатором python (Ubuntu 20.04.3 LTS)?

    @No_name451 Автор вопроса
    Алан Гибизов, Да. Именно так и славил. Просто для ясности решил указать версию питона через '=='.
    Спасибо, буду дальше искать решение.
    Единственное - наткнулся на интересную особенность.
    Когда создаю и активирую окружение, на консоль дропается строка, якобы линк создан, можно проверить в файле:
    /tmp/name_file

    Но по факту такого файла в данной директории нет) Может из-за этого не работает, устал уже голову ломать.
    Мейби разрабы кривую версию залили.
  • В какой структуре данных хранятся контейнеры* (list, turple) в Python* 3.x (Cpyhtoh)?

    @No_name451 Автор вопроса
    Спасибо! Глядел документацию, но похоже не там смотрел...
  • Почему cx_Oracle теряет часть данных при запросе к БД?

    @No_name451 Автор вопроса
    o5a, попробовал запустить функцию не через джанго проект, а как отдельный файл питона (sql.py), заранее вынеся функцию в данный файл.
    В таком случае счетчик count(*) насчитал нужные 300 условных строк. Магия.
  • Почему cx_Oracle теряет часть данных при запросе к БД?

    @No_name451 Автор вопроса
    o5a, Спасибо, проверил.
    Count насчитал как раз 250 условных строк. Из этого вылезает предположение, что дело вовсе не в cx_Oracle. Буду копать дальше.
  • Как пробросить порты в локальной сети?

    @No_name451 Автор вопроса
    Скорее все стоит серый, динамический ip адрес. По этому не думаю, что получится напрямую по ip подключится к роутеру. Хотя за идею спасибо.
  • Как подключить ckeditor для обычного пользователя в джаго?

    @No_name451 Автор вопроса
    Верно, недосмотрел документацию. Добавил эти строки, работает. Спасибо.
  • Как использовать нескольких блокирующих команд в docker-compose?

    @No_name451 Автор вопроса
    Спасибо.
    В целом, разобрался с этим сам и получилось почти как у вас.

    UPD!
    Если таким новичкам как мне нужно для примера взглянуть на то, как все выглядит в общих чертах (подключение django, postgres, redis, gunicorn, nginx), ссылка на мой проект: https://github.com/coldcloudgold/API
  • Как использовать нескольких блокирующих команд в docker-compose?

    @No_name451 Автор вопроса
    Я понимаю, что такое docker-compose. Как раз интересует то, как выполнить запуск в нем. Что-то вроде:
    command:
    bash -c "python manage.py makemigrations
    && python manage.py migrate
    && python manage.py loaddata fixtures/initial_data.json
    && python manage.py rqworker
    && python manage.py rqscheduler
    && python manage.py runserver"

    Только с возможностью выполнения 3-х последних команд сразу