evrone/evrone-django-template

[WIP] Файловая структура шаблона

ivlevdenis opened this issue · 26 comments

.
├── .circleci/
│   └── config.yml
├── compose/
│   ├── docker-compose.production.yml
│   ├── docker-compose.staging.yml
│   └── docker-compose.yml
├── docker/
│   ├── db/
│   │   └── init_user.sql
│   ├── Dockerfile
│   └── Dockerfile.prod
├── project/
│   ├── api/
│   │   ├── v1/
│   │   │   ├── serializers/
│   │   │   │   └── __init__.py
│   │   │   ├── views/
│   │   │   │   └── __init__.py
│   │   │   ├── __init__.py
│   │   │   └── urls.py
│   │   └── __init__.py
│   ├── apps/
│   │   └── __init__.py
│   ├── settings/
│   │   ├── django/
│   │   │   └── __init__.py
│   │   ├── other/
│   │   │   └── __init__.py
│   │   ├── ci.py
│   │   ├── common.py
│   │   ├── dev.py
│   │   ├── production.py
│   │   └── staging.py
│   ├── tests/
│   │   └── __init__.py
│   ├── asgi.py
│   ├── __init__.py
│   ├── Makefile
│   ├── manage.py*
│   ├── pyproject.toml
│   ├── urls.py
│   └── wsgi.py
├── .dockerignore
├── .editorconfig
├── .gitignore
├── Makefile
└── README.md

А почему отдельная директория project ???

У меня сразу протест по корневым папкам. Папка называется project, но проект это не только бэк но и фронт. А в папке только бэк. Поэтому я за разделение по папкам, frontend/backend/devops.

А зачем нужно два makefile?

Судя по структуре settings, там используется модуль split-settings. Мы его еще не юзали, так что мы тогда тебя спрашивать будем, по примерам использования, видимо.

@akirill0v Что бы куча аппов не смешивалась с остальным.

@akirill0v Что бы куча аппов не смешивалась с остальным.

Вот вопрос как раз - зачем в одном репозитории несколько аппов? Можете привести пример какого уровня аппы там могут быть. Это же не монорепозиторий?

@uhbif19 никакого фронта в беке быть не должно по определению, если это не django templates based проект.

Не понял, зачем разделять api и apps.

Не понял, зачем разделять api и apps.

Для поддержания версионирования. И что бы не смешиывать всё в одном месте.

@ivlevdenis Понятно что в папках джанги фронта не должна быть. Но в репе то он есть, и нужно называть папки для них. Или ты хочешь разделять репы фронта и бэка?

У меня сразу протест по корневым папкам. Папка называется project, но проект это не только бэк но и фронт. А в папке только бэк. Поэтому я за разделение по папкам, frontend/backend/devops.

А зачем нужно два makefile?

Судя по структуре settings, там используется модуль split-settings. Мы его еще не юзали, так что мы тогда тебя спрашивать будем, по примерам использования, видимо.

Нет, там просто импорты с common.py

@ivlevdenis Понятно что в папках джанги фронта не должна быть. Но в репе то он есть, и нужно называть папки для них. Или ты хочешь разделять репы фронта и бэка?

Именно разделять репы. Это уберет проблему деплоя, и разделения разработки фронта и бека, не будут смешиваться коммиты, и тд

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

А почему отдельная директория project ???

Включает в себя всё по проекту - зависимости, приложения, настройки и тд и тп. Именно эта папка будет копироваться в образ.

Добавил страницу в вики, что бы удобнее было отслеживать изменение

Для поддержания версионирования. И что бы не смешиывать всё в одном месте.

В тех случаях что видел я, выделени api приводит к тому, что структура модулей api полностью повторяет структуру аппов. Хочешь поменять логику - проходишься по аппу, а затем ищешь сериалайзер и вью. То есть эти вещи часто меняются вмести, и логично их держать в одном модуле.

Разве нет?

Про версионирование согласен, удобно.

@WinterCitizen @Anon731 Присоединяйтесь.

Именно разделять репы. Это уберет проблему деплоя, и разделения разработки фронта и бека, не будут смешиваться коммиты, и тд

Какую "проблему деплоя" это убирает? Я просто не знаю, часто агитируют за раздельные репы и я так не понял, чем в реальности чем это хорошо.

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

и разделения разработки фронта и бека

А в чем тут проблема с одним репом?

И как работает деплой для разделенных репов?

Именно разделять репы. Это уберет проблему деплоя, и разделения разработки фронта и бека, не будут смешиваться коммиты, и тд

Какую "проблему деплоя" это убирает? Я просто не знаю, часто агитируют за раздельные репы и я так не понял, чем в реальности чем это хорошо.

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

и разделения разработки фронта и бека

А в чем тут проблема с одним репом?

И как работает деплой для разделенных репов?

Давайте рассматривать фронт и бек как отдельные приложения, соответственно если это не django templates. Фронт мы сможем изменять и деплоить независимо от бека. У нас появляется различная для фронта и бека инфраструктура, если смешивать её получится сложноподдерживаемая структура проекта. Программистам разных стеков не нужно мучаться с проблемами не в их приложениях, на примере призмы у меня упорно не хотел собираться фронт из-за некоторых проблем. Переменные окружения не будут смешаны. Запуск тестов будет раздельным, и если у нас падают тесты фронта, то бек от этого не зависит.

И так как мы сейчас в основном разрабатываем api, то это просто интерфейс, которым могут пользоваться различные клиенты, без разделения на фронт, мобилку, другой сервис. Мы же не будем держать это всё в одном репе)

думаю надо посмотреть, как это сделано уже в компании - есть практика по рубистам, наверняка, они также имеют шаблоны.

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

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

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

На самом деле этот шаблон и для маленьких проектов заходит отлично.

также, думаю надо заюзать cookiecutter и добавить celery или rq для очередей.

когда-то делал кукикаттер - можно что-то оттуда почерпнуть.

Да. Я начал писать сервис для карьеры с использованием данной структуры, там есть celery.

@artinnok Только не rq, у него не хватает множества нужного функционала.

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

в этом шаблоне от wemake есть абсолютно все и даже больше - именно то, к чему стремится текущая версия нашего шаблона.

@artinnok Только не rq, у него не хватает множества нужного функционала.

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