🔍 Глубокое погружение в Transactional Outbox. Используем Wolverine
При создании отказоустойчивых backend-систем часто используется паттерн Transactional Outbox, который гарантирует надежную отправку сообщений после успешной транзакции с базой данных.
🛠️ В .NET паттерн Transactional Outbox можно легко реализовать с помощью фреймворков, таких как Wolverine, который предоставляет интеграцию с популярными ORM, автоматическую обработку очередей сообщений и возможность настройки политик доставки.
🎯 В статье Джереми Д. Миллера рассматривается, как интегрировать паттерн Transactional Outbox с помощью Wolverine. Автор делится примерами использования в банковских транзакциях, контроллерах MVC и HTTP-эндпоинтах, объясняя, как избежать потерь сообщений и повысить надежность системы.
📎 Читать статью
При создании отказоустойчивых backend-систем часто используется паттерн Transactional Outbox, который гарантирует надежную отправку сообщений после успешной транзакции с базой данных.
🛠️ В .NET паттерн Transactional Outbox можно легко реализовать с помощью фреймворков, таких как Wolverine, который предоставляет интеграцию с популярными ORM, автоматическую обработку очередей сообщений и возможность настройки политик доставки.
🎯 В статье Джереми Д. Миллера рассматривается, как интегрировать паттерн Transactional Outbox с помощью Wolverine. Автор делится примерами использования в банковских транзакциях, контроллерах MVC и HTTP-эндпоинтах, объясняя, как избежать потерь сообщений и повысить надежность системы.
📎 Читать статью
🐛🔍 Как найти баг в 2088 коммитах с помощью git bisect
Метод
Задача: найти конкретный коммит, который вызвал регрессионную ошибку в проекте.
Исходные данные:
✔️ Ошибка была зарегистрирована 21 октября. Она находится в текущей версии на ветке main.
✔️ Ошибка отсутствует в более ранней версии, которая была выделена в отдельную ветку
✔️ Ветку
🔗 Читать статью
🔗 Зеркало
Метод
git bisect
— мощный инструмент для поиска изменения, вызвавшего баг в коде: с его помощью разработчику удалось быстро локализовать проблему, просмотрев всего 11 коммитов вместо изначальных 2088.Задача: найти конкретный коммит, который вызвал регрессионную ошибку в проекте.
Исходные данные:
✔️ Ошибка была зарегистрирована 21 октября. Она находится в текущей версии на ветке main.
✔️ Ошибка отсутствует в более ранней версии, которая была выделена в отдельную ветку
release-5.7.0
.✔️ Ветку
release-5.7.0
создали 2 месяца назад, а с тех пор в ветке main
было сделано много изменений — баг может находиться в любом из нескольких тысяч коммитов, которые невозможно быстро просмотреть.🔗 Читать статью
🔗 Зеркало
Подготовься к собеседованию на позицию Data Scientist!
Профессия Data Scientist становится все более востребованной, и компании ищут специалистов, способных превращать данные в ценные инсайты. Но как успешно пройти техническое собеседование?
Мы собрали 10 типичных задач, которые могут встретиться на собеседовании, и эффективные подходы к их решению:
1. Внешнее и тензорное произведение
2. One-hot кодировка
3. Мониторинг осадков
4. Симуляция бросков кубиков в «Монополии»
5. Бурение скважин для добычи золота
6. Вычисление свертки
7. Бэктестинг торговой стратегии
8. Прогноз оттока клиентов с помощью логистической регрессии
9. Обнаружение спама с использованием дерева решений
10. Предсказание цен на квартиры с помощью линейной регрессии
Чтобы начать решать задачи, достаточно ответить на три простых вопроса по этой ссылке и получить доступ к вводным занятиям курса Алгоритмы и структуры данных и 10 задача
Профессия Data Scientist становится все более востребованной, и компании ищут специалистов, способных превращать данные в ценные инсайты. Но как успешно пройти техническое собеседование?
Мы собрали 10 типичных задач, которые могут встретиться на собеседовании, и эффективные подходы к их решению:
1. Внешнее и тензорное произведение
2. One-hot кодировка
3. Мониторинг осадков
4. Симуляция бросков кубиков в «Монополии»
5. Бурение скважин для добычи золота
6. Вычисление свертки
7. Бэктестинг торговой стратегии
8. Прогноз оттока клиентов с помощью логистической регрессии
9. Обнаружение спама с использованием дерева решений
10. Предсказание цен на квартиры с помощью линейной регрессии
Чтобы начать решать задачи, достаточно ответить на три простых вопроса по этой ссылке и получить доступ к вводным занятиям курса Алгоритмы и структуры данных и 10 задача
🛠 Централизованное управление пакетами в .NET
В .NET есть возможность упростить управление зависимостями NuGet с помощью Central Package Management (CPM). Этот подход позволяет задавать версии пакетов в едином файле Directory.Packages.props, вместо того чтобы дублировать их в каждом проекте.
Основные преимущества CPM:
✅ Централизованное управление версиями пакетов;
✅ Удобство обновления зависимостей;
✅ Снижение вероятности конфликтов.
Эта тема раскрывается в одной из статей, где подробно рассказывается о внедрении CPM и его преимуществах. Особую ценность этот метод представляет для крупных решений с множеством проектов.
Для использования CPM достаточно создать файл Directory.Packages.props в корне решения и указать в нем версии необходимых пакетов. Это заметно упрощает поддержку кода и ускоряет процессы разработки.
📎 Подробности можно найти в статье
В .NET есть возможность упростить управление зависимостями NuGet с помощью Central Package Management (CPM). Этот подход позволяет задавать версии пакетов в едином файле Directory.Packages.props, вместо того чтобы дублировать их в каждом проекте.
Основные преимущества CPM:
✅ Централизованное управление версиями пакетов;
✅ Удобство обновления зависимостей;
✅ Снижение вероятности конфликтов.
Эта тема раскрывается в одной из статей, где подробно рассказывается о внедрении CPM и его преимуществах. Особую ценность этот метод представляет для крупных решений с множеством проектов.
Для использования CPM достаточно создать файл Directory.Packages.props в корне решения и указать в нем версии необходимых пакетов. Это заметно упрощает поддержку кода и ускоряет процессы разработки.
📎 Подробности можно найти в статье
Forwarded from Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Delta Time — незаменимый инструмент в разработке игр на Unity. Он позволяет сделать игру независимой от частоты кадров, но его неправильное использование может сломать весь геймплей. Разберем, когда и как его применять.
👉 Статья
👉 Статья
⚡️Самые полезные каналы по C# в одной папке
В ней:
➖ канал для подготовки к собеседованиям
➖ интересные задачи
➖ основной канал (этот)
➖ книги по C#
➖ лучшие вакансии из сферы
➖ и наш чат, в котором можно общаться и задавать вопросы
Добавляйте 👉 тык сюда
В ней:
Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Что такое AOT и почему это важно?
Ahead-of-Time (AOT) компиляция в .NET — это способ превращения приложения в нативный исполняемый файл, который не зависит от JIT (Just-In-Time) компиляции во время выполнения. Это улучшает производительность, уменьшает время запуска и делает приложения более компактными. Однако работа с AOT накладывает ограничения: многие библиотеки используют рефлексию, которая в AOT не работает без дополнительных настроек.
📘 YAML.Net и Native AOT
YAML.Net — популярная библиотека для работы с YAML в .NET, но её стандартный подход к сериализации полагается на рефлексию. В статье Эндрю Лока описывается использование генератора исходного кода YAML.Net, который создаёт оптимизированный код, совместимый с AOT. Это упрощает настройку библиотек и помогает избежать проблем с рефлексией.
Подробнее в статье
Ahead-of-Time (AOT) компиляция в .NET — это способ превращения приложения в нативный исполняемый файл, который не зависит от JIT (Just-In-Time) компиляции во время выполнения. Это улучшает производительность, уменьшает время запуска и делает приложения более компактными. Однако работа с AOT накладывает ограничения: многие библиотеки используют рефлексию, которая в AOT не работает без дополнительных настроек.
📘 YAML.Net и Native AOT
YAML.Net — популярная библиотека для работы с YAML в .NET, но её стандартный подход к сериализации полагается на рефлексию. В статье Эндрю Лока описывается использование генератора исходного кода YAML.Net, который создаёт оптимизированный код, совместимый с AOT. Это упрощает настройку библиотек и помогает избежать проблем с рефлексией.
Подробнее в статье
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
✨ Новые возможности для Windows Forms: асинхронные API в .NET 9
Windows Forms получил обновления с поддержкой асинхронных API! В статье из блога разработчиков рассказано о новом подходе к асинхронным операциям в .NET 9 — работающие с долгими операциями методы, теперь доступны с использованием async/await. Это значит, что разработчики смогут избежать блокировки интерфейса, обеспечивая большую отзывчивость приложений.
Основные изменения включают улучшение взаимодействия с задачами и обновлённый подход к обработке долгих операций. Теперь создание современных и удобных приложений с Windows Forms станет проще!
📎 Подробнее в блоге разработчиков
Windows Forms получил обновления с поддержкой асинхронных API! В статье из блога разработчиков рассказано о новом подходе к асинхронным операциям в .NET 9 — работающие с долгими операциями методы, теперь доступны с использованием async/await. Это значит, что разработчики смогут избежать блокировки интерфейса, обеспечивая большую отзывчивость приложений.
Основные изменения включают улучшение взаимодействия с задачами и обновлённый подход к обработке долгих операций. Теперь создание современных и удобных приложений с Windows Forms станет проще!
📎 Подробнее в блоге разработчиков
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
💾 CDC vs Outbox: как решить проблему двойной записи в распределенной системе
В распределённых системах согласованность данных часто становится настоящим вызовом. Особенно это касается сценариев, где требуется выполнить несколько операций в разных системах одновременно.
Как избежать проблем двойной записи? Современные подходы, такие как захват изменений данных (CDC) и паттерн Outbox, предлагают интересные решения. Эти методики позволяют поддерживать целостность данных, избегать сбоев и минимизировать риски.
Хотите узнать, как внедрить такие подходы и выбрать оптимальный для своей системы? Загляните в захватывающее руководство, чтобы разобраться в тонкостях.
🔗 Читать статью
🔗 Зеркало
В распределённых системах согласованность данных часто становится настоящим вызовом. Особенно это касается сценариев, где требуется выполнить несколько операций в разных системах одновременно.
Как избежать проблем двойной записи? Современные подходы, такие как захват изменений данных (CDC) и паттерн Outbox, предлагают интересные решения. Эти методики позволяют поддерживать целостность данных, избегать сбоев и минимизировать риски.
Хотите узнать, как внедрить такие подходы и выбрать оптимальный для своей системы? Загляните в захватывающее руководство, чтобы разобраться в тонкостях.
🔗 Читать статью
🔗 Зеркало
Когда последний раз писали код с потоками? Если навыки чуть «заржавели», самое время вспомнить базу:
1️⃣ Thread vs Task: Task проще и удобнее для асинхронных задач, но иногда прямое управление потоками через Thread всё ещё необходимо. Помните про правильное завершение работы потоков!
2️⃣ Синхронизация: чтобы избежать гонки данных, используйте lock, Monitor или более сложные механизмы вроде Mutex. А потокобезопасные коллекции из System.Collections.Concurrent помогут сократить бойлерплейт.
3️⃣ UI и фоновые задачи: асинхронные операции — спасение для UI-приложений. Вместо блокировки используйте Task.Run и async/await, чтобы пользовательский интерфейс оставался отзывчивым.
4️⃣ Тюнинг производительности: профилируйте код! Отследите использование пула потоков и минимизируйте затраты на блокировки.
Чтобы подробнее вспомнить детали и углубиться в нюансы, советуем заглянуть в эту статью. Там разбираются полезные примеры и даются советы по улучшению отзывчивости приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Полный гайд по тестированию с NUnit в C# 13 и .NET 9
Статья на C# Corner предлагает всестороннее руководство по NUnit для новых версий C# и .NET.
Что вы найдёте в статье?
✅ Работа с NUnit: принципы AAA (Arrange-Act-Assert), фикстуры, параметризация тестов, использование атрибутов, таких как [Test], [SetUp], [TearDown].
✅ Интеграция с CI/CD: автоматизация тестирования через Azure Pipelines, GitHub Actions и другие платформы.
✅ Мокинг и изоляция: использование библиотек, таких как Moq, для упрощения тестов, работающих с внешними зависимостями.
✅ Инструменты анализа: примеры настройки покрытия кода и интеграция с такими инструментами, как Coverlet или ReportGenerator.
📎 Читать материал
Статья на C# Corner предлагает всестороннее руководство по NUnit для новых версий C# и .NET.
Что вы найдёте в статье?
✅ Работа с NUnit: принципы AAA (Arrange-Act-Assert), фикстуры, параметризация тестов, использование атрибутов, таких как [Test], [SetUp], [TearDown].
✅ Интеграция с CI/CD: автоматизация тестирования через Azure Pipelines, GitHub Actions и другие платформы.
✅ Мокинг и изоляция: использование библиотек, таких как Moq, для упрощения тестов, работающих с внешними зависимостями.
✅ Инструменты анализа: примеры настройки покрытия кода и интеграция с такими инструментами, как Coverlet или ReportGenerator.
📎 Читать материал
🍎🍏 Подборка лучших статей «Библиотеки шарписта» за ноябрь: сохраняй в заметки, чтобы не пропустить #самыйсок
⚙️🚦 Лучшие практики для тестирования асинхронного кода
🚀 CountBy: Новый метод LINQ в .NET 9, который упростит вашу жизнь
❓ Беспощадный фронтенд-тест
⚙️⚙️ System.Threading.Channels или каналы в C#
🛠️🚀 Что нового в Visual Studio 17.12?
⚙️🚦 Лучшие практики для тестирования асинхронного кода
🚀 CountBy: Новый метод LINQ в .NET 9, который упростит вашу жизнь
❓ Беспощадный фронтенд-тест
⚙️⚙️ System.Threading.Channels или каналы в C#
🛠️🚀 Что нового в Visual Studio 17.12?
🌐 Работа с Amazon SQS в C#: асинхронная обработка сообщений
⚙️ Асинхронная обработка данных играет ключевую роль в построении масштабируемых приложений, особенно если речь идёт о микросервисах. Amazon SQS (Simple Queue Service) — один из самых популярных сервисов AWS для работы с очередями сообщений.
❓ Статья объясняет, как подключиться к SQS, начиная с настройки AWS SDK for .NET. Автор показывает, как создать очередь, отправлять и получать сообщения, а также настроить права доступа для взаимодействия с сервисом.
🛠️ Основное внимание уделено подходам к polling — способам получения сообщений из очереди. Здесь затрагиваются две стратегии: short polling, при котором запросы на получение выполняются немедленно, и long polling, при котором сервер ожидает появления сообщений, чтобы минимизировать задержки и затраты.
⚙️ Асинхронная обработка данных играет ключевую роль в построении масштабируемых приложений, особенно если речь идёт о микросервисах. Amazon SQS (Simple Queue Service) — один из самых популярных сервисов AWS для работы с очередями сообщений.
❓ Статья объясняет, как подключиться к SQS, начиная с настройки AWS SDK for .NET. Автор показывает, как создать очередь, отправлять и получать сообщения, а также настроить права доступа для взаимодействия с сервисом.
🛠️ Основное внимание уделено подходам к polling — способам получения сообщений из очереди. Здесь затрагиваются две стратегии: short polling, при котором запросы на получение выполняются немедленно, и long polling, при котором сервер ожидает появления сообщений, чтобы минимизировать задержки и затраты.
❌ Почему не стоит использовать события в ASP.NET Core?
События (events) в C# — мощный инструмент, который позволяет одному объекту уведомлять других о произошедших изменениях. Однако в контексте ASP.NET Core их использование может привести к неожиданным проблемам:
🔸 Сложность отладки: понять, кто подписался на событие и в каком порядке вызываются обработчики, может быть непросто.
🔸 Утечки памяти: если обработчики событий не отписываются, объекты могут оставаться в памяти, создавая утечки.
🔸 Проблемы с жизненным циклом объектов: ASP.NET Core управляет объектами через DI-контейнер, и события могут нарушить этот процесс.
Вместо событий автор статьи предлагает использовать более современные подходы:
👉 Шаблон Mediator для передачи команд между компонентами.
👉 Шаблон Observer для управления подпиской на изменения.
👉 Чётко продуманное внедрение зависимостей (DI).
📎 Подробнее о том, почему события могут быть проблемой и какие есть альтернативы, читайте в статье
События (events) в C# — мощный инструмент, который позволяет одному объекту уведомлять других о произошедших изменениях. Однако в контексте ASP.NET Core их использование может привести к неожиданным проблемам:
🔸 Сложность отладки: понять, кто подписался на событие и в каком порядке вызываются обработчики, может быть непросто.
🔸 Утечки памяти: если обработчики событий не отписываются, объекты могут оставаться в памяти, создавая утечки.
🔸 Проблемы с жизненным циклом объектов: ASP.NET Core управляет объектами через DI-контейнер, и события могут нарушить этот процесс.
Вместо событий автор статьи предлагает использовать более современные подходы:
👉 Шаблон Mediator для передачи команд между компонентами.
👉 Шаблон Observer для управления подпиской на изменения.
👉 Чётко продуманное внедрение зависимостей (DI).
📎 Подробнее о том, почему события могут быть проблемой и какие есть альтернативы, читайте в статье
🛠️ Анонс .NET Community Toolkit 8.4.0! 🚀
Microsoft представила новую версию .NET Community Toolkit 8.4.0, которая принесла множество улучшений и новых возможностей для разработчиков. Этот набор инструментов создан, чтобы упростить создание производительных и качественных приложений на .NET.
🔍 Что нового в версии 8.4.0?
🔹 Поддержка .NET 8, включая оптимизации для современных возможностей платформы.
🔹 Новые API для упрощения разработки и улучшения читаемости кода.
🔹 Улучшения в производительности и стабильности.
🔹 Расширенная документация и улучшенные примеры использования.
Этот релиз делает .NET Community Toolkit ещё более мощным и удобным инструментом для разработчиков, независимо от того, работаете ли вы с WPF, UWP, WinUI или MAUI.
📎 Узнайте все детали обновления в блоге разработчиков
Microsoft представила новую версию .NET Community Toolkit 8.4.0, которая принесла множество улучшений и новых возможностей для разработчиков. Этот набор инструментов создан, чтобы упростить создание производительных и качественных приложений на .NET.
🔍 Что нового в версии 8.4.0?
🔹 Поддержка .NET 8, включая оптимизации для современных возможностей платформы.
🔹 Новые API для упрощения разработки и улучшения читаемости кода.
🔹 Улучшения в производительности и стабильности.
🔹 Расширенная документация и улучшенные примеры использования.
Этот релиз делает .NET Community Toolkit ещё более мощным и удобным инструментом для разработчиков, независимо от того, работаете ли вы с WPF, UWP, WinUI или MAUI.
📎 Узнайте все детали обновления в блоге разработчиков
🌍 Как и просили.. Get запрос разными языками
Если ваш Web API на ASP.NET Core должен поддерживать несколько языков, стоит обратить внимание на статью. Она расскажет, как адаптировать приложение под разные языки и культуры.
Основная идея проста: использовать ресурсные файлы (.resx) для перевода текстов, настроить локализацию через RequestLocalizationOptions и добавить middleware, которое будет определять язык на основе заголовка Accept-Language. В статье также показан пример API, где данные, например, о пользователе, возвращаются уже с учётом выбранного языка.
Локализация делает ваше приложение более доступным и готовым к расширению. Теперь добавить новый язык — дело пары минут!
Если ваш Web API на ASP.NET Core должен поддерживать несколько языков, стоит обратить внимание на статью. Она расскажет, как адаптировать приложение под разные языки и культуры.
Основная идея проста: использовать ресурсные файлы (.resx) для перевода текстов, настроить локализацию через RequestLocalizationOptions и добавить middleware, которое будет определять язык на основе заголовка Accept-Language. В статье также показан пример API, где данные, например, о пользователе, возвращаются уже с учётом выбранного языка.
Локализация делает ваше приложение более доступным и готовым к расширению. Теперь добавить новый язык — дело пары минут!
🚀 HybridCache в .NET 9 — гибридное кэширование на новом уровне
HybridCache — это библиотека в .NET 9, которая объединяет локальный (in-memory) и распределённый кэш (например, Redis). Она предназначена для высокопроизводительного кэширования с минимальными задержками и максимальной надёжностью.
🔑 Основные возможности HybridCache:
Локальный и распределённый кэш: данные хранятся локально для быстрой доставки и синхронизируются с распределённым кэшем.
Умная сериализация: автоматическая работа с сериализацией и десериализацией для out-of-process хранилищ.
GetOrCreateAsync: запросы гарантируют, что только один поток вызовет метод получения данных.
🛠 Пример использования:
HybridCache — это библиотека в .NET 9, которая объединяет локальный (in-memory) и распределённый кэш (например, Redis). Она предназначена для высокопроизводительного кэширования с минимальными задержками и максимальной надёжностью.
🔑 Основные возможности HybridCache:
Локальный и распределённый кэш: данные хранятся локально для быстрой доставки и синхронизируются с распределённым кэшем.
Умная сериализация: автоматическая работа с сериализацией и десериализацией для out-of-process хранилищ.
GetOrCreateAsync: запросы гарантируют, что только один поток вызовет метод получения данных.
🛠 Пример использования:
builder.Services.AddHybridCache();
var data = await hybridCache.GetOrCreateAsync(«key», async cancel => await LoadDataAsync());
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Работаете из дома?
Расскажите, что вас больше всего раздражает на домашнем рабочем месте.
А может, у вас есть крутые находки, которые сделали удалёнку комфортнее? 🖥🪑
Делитесь своими лайфхаками или топовыми покупками — возможно, они помогут кому-то из нас улучшить своё пространство!
#интерактив
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Классическая задача философов за обедом: параллельное программирование в действии
Проблема философов, обедающих за круглым столом, — это фундаментальная задача параллельных вычислений, демонстрирующая сложности синхронизации в многопоточных системах.
❓ Суть проблемы заключается в том, что пять философов сидят за столом с ограниченным количеством вилок между ними. Каждому философу требуются две вилки для принятия пищи, что создает потенциальный риск взаимоблокировки и голодания участников.
В статье задача решается с использованием асимметричного подхода к захвату ресурсов. Основные шаги:
1️⃣ Моделирование:
Философы — потоки.
Вилки — объекты синхронизации (мьютексы или семафоры).
2️⃣ Предотвращение взаимоблокировок:
Один из философов берёт сначала правую вилку, а потом левую, чтобы разрушить цикл ожидания.
3️⃣ Учет справедливости:
Вводятся тайм-ауты или очереди, чтобы избежать голодания философов.
4️⃣ Применение примитивов C#:
Используются Mutex и Semaphore для синхронизации потоков и управления доступом к ресурсам.
Этот подход предотвращает взаимоблокировки и балансирует доступ к ресурсам.
Пример кода в статье адаптирован для управления пулом соединений к базе данных.
Проблема философов, обедающих за круглым столом, — это фундаментальная задача параллельных вычислений, демонстрирующая сложности синхронизации в многопоточных системах.
В статье задача решается с использованием асимметричного подхода к захвату ресурсов. Основные шаги:
Философы — потоки.
Вилки — объекты синхронизации (мьютексы или семафоры).
Один из философов берёт сначала правую вилку, а потом левую, чтобы разрушить цикл ожидания.
Вводятся тайм-ауты или очереди, чтобы избежать голодания философов.
Используются Mutex и Semaphore для синхронизации потоков и управления доступом к ресурсам.
Этот подход предотвращает взаимоблокировки и балансирует доступ к ресурсам.
Пример кода в статье адаптирован для управления пулом соединений к базе данных.
Please open Telegram to view this post
VIEW IN TELEGRAM