Михаил Омельченко | AI&IT
5.27K subscribers
976 photos
192 videos
4 files
714 links
ИИ в работе, разработка, веб. Агенты, автоматизация, инструменты. Веду я, Михаил Омельченко, внешний технический директор по ИИ и ментор.

Менторство, реклама и сотрудничество: djwoms.ru
Telegram - @DJWOMS
YouTube - https://www.youtube.com/c/DjangoSchool
Download Telegram
🧐 Domain Service

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

Очень часто существуют глаголы или какие-то действия, которые нельзя отнести к какой-то сущности или к какому-то объекту-значению. Если существует такая операция в предметной области, ее называют Domain Service (она отличается от прикладной службы, которая является клиентом).

Есть три характеристики служб:

✅ Операция, выполняемая службой, относится к концепции предметной области, которая не принадлежит ни одной из существующих сущностей;

✅ Операция выполняется над различными объектами модели предметной области;

✅ Операция не имеет состояния.


🤔 Domain Event

Событие — это то, что произошло в прошлом. Логически, событие предметной области — это то, что произошло в конкретной предметной области, и то, о чем должны быть в курсе и на что должны реагировать другие части той же предметной области.
Должны быть иммутабельными (так как нельзя менять прошлое). Название должно описывать случившиеся в прошлом событие.

😳 Module

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

Их цель – ослабление связей между классами, которые находятся в различных модулях. Так как модули в подходе DDD – это неформальные или обобщенные разделы, их следует правильно называть. Выбор их имен является функцией единого языка.

#djangoschool #ddd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
👉 Factory

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

Проблема в том, что иногда задачу создания сложных вещей передают клиенту, и тогда клиенту нужно знать, как устроен объект внутри. Это нарушает инкапсуляцию и привязывает клиента к определенной реализации (таким образом, при изменении объекта придется менять и реализацию клиента).

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

👉 Aggregate

Aggregate - это группа связанных объектов сущностей или значений. То есть эти объекты рассматриваются как единое целое с точки зрения изменения данных. У каждого агрегата есть корень (Aggregate Root) и граница, внутри которой всегда должны быть удовлетворены инварианты.

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

👉 Repository

Репозиторий - это место, где безопасно хранятся элементы. В DDD репозиторий используется для хранения агрегатов. Когда вы помещаете агрегат в репозиторий и затем извлекаете его оттуда, вы получаете целостный объект. Если агрегат изменяется, изменения сохраняются. Если агрегат удаляется, его уже нельзя извлечь.

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

Есть два типа репозиториев:

❇️ Которые имитируют коллекции

❇️ Которые обеспечивают постоянное хранение

#djangoschool #ddd
🔥5👍1
Тест подсветки синтаксиса в телеграм

 
from starlette.status import HTTP_400_BAD_REQUEST, HTTP_204_NO_CONTENT
from fastapi import Depends, HTTPException, APIRouter
👍7❤5🤔4
У всех отображается в виде нормального кода?

Это получается теперь будет более-менее читабельный код?
👍24🍾1
Потихоньку готовлю доклад на тему "Чистой архитектуры" и DDD в python проектах.

Если хватит сил, то покажу пример на паре фреймворков.

Но для начала, бизнес логика никак не должна зависеть от инфраструктуры, фреймворков и БД.
🔥20
Заметил в последнее время много роликов, и докладов на тему чистой архитектуры и ddd в python проектах.

Видимо пришло время.

Хештег #хватитписатьговно
🔥28
Объяснение сложных систем, используя наглядные изображения и простые термины.

👉 Протоколы связи
👉 CI/CD
👉 Архитектурные шаблоны
👉 База данных
👉 Кэш
👉 Микросервисная архитектура
👉 Платежные системы
👉 DevOps
👉 Git
👉 Облачные сервисы
👉 Инструменты повышения производительности разработчиков
👉 Linux
👉 Безопасность
👉 Практические примеры из реальной жизни

https://github.com/ByteByteGoHq/system-design-101
🔥22
А какая погода у вас?
🔥14
Liquibase — это независимая от базы данных библиотека с открытым исходным кодом для отслеживания, управления и применения изменений схемы базы данных.

В качестве описания структуры и изменений базы данных используется: SQL, XML, YAML и JSON форматы.

Пришлось использовать вместо alembic.

Ссылка
👍8👏1