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

Менторство, реклама и сотрудничество: djwoms.ru
Telegram - @DJWOMS
YouTube - https://www.youtube.com/c/DjangoSchool
Download Telegram
Паттерн Одиночка (Singleton, Синглтон)

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

✅ Гарантированная уникальность: паттерн Синглтон гарантирует, что у нас есть только один экземпляр класса, что полезно, когда нужно иметь эксклюзивный доступ к ресурсам и избежать проблем синхронизации.

✅ Управление состоянием: паттерн Синглтон упрощает управление состоянием объекта, поскольку все запросы будут адресоваться к одному и тому же экземпляру класса. Это позволяет сохранять и синхронизировать состояние между запросами.

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

В заключении

Паттерн Синглтон помогает нам управлять доступом к объекту, гарантируя, что у нас есть только один экземпляр класса. Он полезен для обеспечения единого состояния объекта и предоставляет удобный глобальный доступ к этому объекту.


🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).

Обучаю с нуля, а так же провожу консультации для мидлов и сеньоров.

Пишите - https://t.me/DJWOMS

🌐 #IT #программирование #паттерн
🔥3👍1
Анти-паттерны - полная противоположность паттернам.

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

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

Скоро будут посты на эту тему.
👍10
🛑 Анти-паттерн "God Object": Как избегать кодового беспорядка

🤖 Что такое "God Object"?

God Object - это объект или класс в программном коде, который пытается делать всё: управлять множеством задач, содержать многочисленные методы и данные. Это чрезмерное скопление функциональности в одном месте.

🙅 Почему это плохо?

❇️ Сложность:
"God Object" становится огромным и трудным для понимания, что делает код запутанным.

❇️ Неупорядоченность: Множество функций в одном месте делает код неструктурированным, что усложняет его поддержку и расширение.

❇️ Зависимость: Модификация "God Object" может затронуть множество частей кода, что создает риск ошибок.

🚀 Как избегать "God Object"?

✅ Разделение ответственностей: Разбейте функциональность на мелкие, независимые части. Каждый объект или класс должен выполнять только одну задачу.

✅ Используйте принципы SOLID: Эти принципы помогут создать чистую архитектуру, где каждая часть кода знает только о необходимой минимум информации.

✅ Тестирование: Покройте код тестами, чтобы быстро обнаруживать проблемы.

✅ Рефакторинг: Если вы обнаружите "God Object" в своем коде, не бойтесь провести рефакторинг, разделив функциональность на более мелкие куски.

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

🧐 Вам уже доводилось сталкиваться с "God Object"? Поделитесь вашими историями и методами борьбы с этим анти-паттерном в комментариях!
👍11🔥2
Hard Code и почему его следует избегать

🤖 Что такое "Hard Code"?

"Hard Code" - это практика написания программного кода с жестко закодированными значениями, которые трудно изменить или поддерживать. Это значит, что вместо использования переменных или настроек, значения вставляются напрямую в код.

🙅 Почему это плохо?

❇️ Отсутствие гибкости:
Жестко закодированные значения делают код не масштабируемым. Если что-то изменится, придется лезть в код и менять его вручную.

❇️ Трудности в поддержке: Чтение и понимание такого кода затруднено, а исправление ошибок или добавление новых функций становятся сложными задачами.

❇️ Зависимость от конкретного контекста: "Hard Code" привязывает значения к конкретным условиям или окружению, что делает код не переносимым.

🛠 Как избегать "Hard Code"?

✅ Используйте конфигурации:
Выносите настройки и константы в конфигурационные файлы или переменные. Это делает код гибким и управляемым.

✅ Документируйте код: Правильное описание, комментарии и документация помогут другим разработчикам и вам самим легко понимать код.

✅ Тестируйте: Убедитесь, что ваш код протестирован на разных данных и сценариях.

✅ Используйте паттерны проектирования: Некоторые паттерны, такие как Dependency Injection, могут помочь сделать ваш код более гибким.

🚀 Важный вывод:

Избегайте "Hard Code" в вашем коде. Сделайте его гибким, читаемым и поддерживаемым. Это сэкономит вам в будущем много времени!

🤔 А какие советы у вас есть по борьбе с "Hard Code"? Поделитесь ими в комментариях!
👍8
Что такое Паттерн Сага?

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

Как это работает?

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

Пример:

Вы кликнули "Купить" на сайте. Сага может выглядеть так:

Отправить запрос на сервер для резервирования товара.
Если запрос успешен, обновить интерфейс и вывести сообщение "Успех!".
Если что-то пошло не так, отменить резервацию и показать сообщение об ошибке.
Все это происходит последовательно и структурировано.

Почему это важно?

Паттерн Сага делает управление сложными последовательностями действий более понятным и управляемым. Он позволяет избегать "callback hell" и делает код более читаемым.

#IT #ПаттернСага
👍11
🧐 Event Sourcing

Что такое Event Sourcing?

Event Sourcing - это паттерн проектирования, который предлагает не хранить текущее состояние приложения в базе данных, а записывать все изменения состояния как события (events). Эти события могут быть прочитаны и воспроизведены в будущем для воссоздания текущего состояния.

Зачем это нужно?

Представьте, что вы разрабатываете интернет-магазин. С Event Sourcing, вы не записываете только текущее состояние склада, но и все события, которые привели к этому состоянию: продажи, поставки, возвраты и т.д.

Как это работает?

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

Преимущества Event Sourcing:

✅ История и аудит:
Вы всегда можете вернуться и посмотреть, как и почему изменилось состояние приложения.

✅ Гибкость: Вы можете легко внести изменения в логику, воссоздавая текущее состояние из событий.

✅ Отказоустойчивость: Ваши данные не "теряются" из-за ошибок, они всегда остаются в истории событий.

Недостатки Event Sourcing:

🔶 Сложность: Реализация Event Sourcing может быть сложнее, чем обычное хранение состояния.

🔶 Использование ресурсов: Хранение большого количества событий может потреблять больше ресурсов.

Когда использовать Event Sourcing?

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

В итоге, Event Sourcing - это мощный инструмент, который позволяет создавать более надежные и гибкие приложения. Если вам встретится проект, где история важна, обязательно рассмотрите этот паттерн.

#djangoschool #IT #eventsourcing
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Что такое CQRS?

Всем привет! 🖖

CQRS - это аббревиатура, которая означает "Command Query Responsibility Segregation". Это паттерн проектирования, который предлагает разделять операции записи (команды) и операции чтения (запросы) в вашем приложении.

🤔 Зачем это нужно?

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

😎 Как это работает?

С CQRS, вы имеете две четко разделенные модели данных: одна для команд (изменения данных) и одна для запросов (чтения данных). Команды обрабатываются асинхронно, и вы можете оптимизировать вашу инфраструктуру для их обработки. Запросы также могут быть более оптимизированы, так как вы знаете, что они не изменяют данные.

👍 Преимущества CQRS

✅ Масштабируемость: Вы можете масштабировать команды и запросы независимо друг от друга.

✅ Более быстрые запросы: Поскольку запросы не блокируются изменениями данных, они могут быть более быстрыми.

✅ Улучшенная безопасность: Вы можете установить разные уровни доступа для команд и запросов.

😳 Недостатки CQRS

🔶 Больше сложности: Разделение на команды и запросы может усложнить архитектуру приложения.

🔶 Дополнительная работа: Реализация CQRS может потребовать больше усилий.

🧐 Когда использовать CQRS?

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

Итак, CQRS - это еще один мощный инструмент в наборе разработчика. Он помогает лучше управлять данными и улучшить производительность вашего приложения. Если вы разрабатываете сложные системы, обязательно изучите этот паттерн!

#djangoschool #IT #CQRS
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤1👍1
👋 Всем привет!
Мой бывший ученик прошел большой путь. Хочу поделиться его каналом.

👋 Здравствуй!

Меня зовут Варфоломеев Захар.
Недавно мне исполнилось 17 лет. Я ученик 11 класса, который не любит школу и занимается тем, что нравится.

Нравится мне - IT направление и математика. Свою привязанность к этим направлениям я осознал в 12 лет, с тех пор с энтузиазмом осваиваюсь. Материалы я изучал самостоятельно, но не совсем, в начале пути, где то в 13 лет я встретил Михаила, очень благодарен этому человеку. Он заложил во мне главный навык - умение учиться самостоятельно.

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

Последние 2 года я занимаюсь изучением искусственного интеллекта! Перед этим, 2 года я занимался как backend, так и frontend разработкой.

Мой канал посвящен темам машинного обучения, математики, компьютерной техники и программирования. Там я делюсь знаниями, что приобретаю на своем пути айтишника))

Выполняю проекты по машинному обучению на заказ. Работаю над собственным исследовательским проектом по обработке звука.

Люблю преподавать, работаю над своим курсом по машинному обучению. Являюсь членом команды образовательной организации БАШНЯ от МГТУ им. Баумана.

Если я смог заинтересовать, подписывайтесь ✨:
https://t.me/vf_science
https://t.me/vf_science

Буду рад твоему визиту!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍7
🤔 Что такое Server Sent Events (SSE)?

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

💡 Как это работает?

Клиент отправляет HTTP-запрос на сервер.
Сервер отвечает специальным заголовком Content-Type: text/event-stream, что указывает на то, что это поток событий.

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

🚀 Чем это полезно?

Server Sent Events идеально подходят для сценариев, где вам нужно передавать обновления, такие как новости, уведомления или данные в онлайн-играх. SSE также менее сложны в настройке по сравнению с WebSocket, и могут быть использованы совместно с другими технологиями.

👩‍💻 Как это реализовать?

На стороне сервера, вы можете использовать множество языков программирования, включая Python, Node.js, и другие, чтобы отправлять данные в формате SSE. На стороне клиента, вы можете использовать JavaScript для прослушивания и обработки событий.

Server Sent Events - это мощный инструмент для веб-разработчиков.

#djangoschool #sse
🔥10👍5
😎 А у вас какая погода?
❤12🔥4
Сижу в кафе с пустой тарелкой.

А чего добился ты?


😜 Местная шутка.
😁4
This media is not supported in your browser
VIEW IN TELEGRAM
Кто-то кормит голубей, а кто-то чаек 😁
😁4
🚢🔗 Анти-паттерн "Лодочный якорь (Boat anchor)"

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

"Лодочный якорь" получил свое название от аналогии с якорем на лодке. Когда якорь опущен в воду, лодка останавливается и не может двигаться вперед. Точно так же, наличие неиспользуемой функциональности в проекте замедляет разработку, увеличивает сложность поддержки и может привести к проблемам, и ошибкам.

Основная причина возникновения анти-паттерна "Лодочный якорь" - это необдуманное добавление новой функциональности без оценки ее потенциальной ценности и необходимости. Часто это происходит из-за срочности задачи или желания удовлетворить запросы пользователя.

Как избежать "Лодочного якоря":

1️⃣ Правильное планирование: перед добавлением новой функциональности проведите анализ ее ценности и необходимости. Оцените, как она соответствует целям проекта и потребностям пользователей.

2️⃣ Удаление неиспользуемого кода: периодически ревьюируйте код и удаляйте ненужные функции и модули. Это поможет упростить кодовую базу и уменьшить сложность проекта.

3️⃣ Коммуникация и обратная связь: поддерживайте открытую коммуникацию со всеми участниками проекта. Регулярно обсуждайте, оценивайте функциональность и ее использование.

4️⃣ Обучение и самообразование: развивайтесь в IT, изучайте новые технологии и подходы. Это поможет более точно оценивать ценность функциональности и избегать "Лодочного якоря".

Итак, помните, что "Лодочный якорь" - это анти-паттерн, который может затормозить разработку и усложнить поддержку проекта. Будьте внимательны при добавлении новой функциональности и удаляйте неиспользуемый код. Так вы сможете создавать более эффективные и легко поддерживаемые системы.

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

#djangoschool #pattern
👍6