🔍 Паттерн Наблюдатель (Observer Pattern) в C#: Как и зачем использовать?
Observer — это поведенческий паттерн проектирования, который позволяет создать зависимость один ко многим между объектами. Суть в том, что один объект информирует несколько других объектов (наблюдателей) об изменении своего состояния без явной связи с ними.
Когда использовать Observer Pattern?
⚙️ Системы уведомлений и оповещений: Когда несколько компонентов должны реагировать на изменения в одном объекте (например, обновления статуса пользователя).
⚙️ Реактивные приложения: Когда вы строите систему, которая должна автоматически реагировать на изменения состояния без жёсткой связи между компонентами.
⚙️ GUI приложения: Когда UI должен быть обновлён при изменении данных (например, в паттерне MVVM).
Альтернативы Observer Pattern: можно использовать централизованный механизм событий (например, EventHandler в C#), или подход Publisher-Subscriber, где посредник управляет подписками и рассылкой сообщений.
📎 Подробнее в статье
Observer — это поведенческий паттерн проектирования, который позволяет создать зависимость один ко многим между объектами. Суть в том, что один объект информирует несколько других объектов (наблюдателей) об изменении своего состояния без явной связи с ними.
Когда использовать Observer Pattern?
⚙️ Системы уведомлений и оповещений: Когда несколько компонентов должны реагировать на изменения в одном объекте (например, обновления статуса пользователя).
⚙️ Реактивные приложения: Когда вы строите систему, которая должна автоматически реагировать на изменения состояния без жёсткой связи между компонентами.
⚙️ GUI приложения: Когда UI должен быть обновлён при изменении данных (например, в паттерне MVVM).
Альтернативы Observer Pattern: можно использовать централизованный механизм событий (например, EventHandler в C#), или подход Publisher-Subscriber, где посредник управляет подписками и рассылкой сообщений.
📎 Подробнее в статье
❤12
🔥 Конвертация XML в Word — проще, чем кажется!
Преобразование XML в Word больше не головная боль. Библиотека FileConversionLibrary упрощает этот процесс до нескольких строчек кода!
Библиотека предоставляет основные инструменты для конвертации файлов CSV и XML в форматы PDF, Word, YAML и JSON, упрощая обработку данных. Она доступна на платформах NuGet и GitHub, что облегчает ее интеграцию в проекты.
🎯 Подробности в статье
Преобразование XML в Word больше не головная боль. Библиотека FileConversionLibrary упрощает этот процесс до нескольких строчек кода!
Библиотека предоставляет основные инструменты для конвертации файлов CSV и XML в форматы PDF, Word, YAML и JSON, упрощая обработку данных. Она доступна на платформах NuGet и GitHub, что облегчает ее интеграцию в проекты.
🎯 Подробности в статье
🥰9👍1🌚1
❓ Почему Span и ref struct не подходят для асинхронных операций в C# ?
⚙️Стековая природа Span и ref struct:
Эти структуры выделяются на стеке, и их время жизни ограничено текущим контекстом выполнения функции.
Асинхронные операции могут охватывать несколько вызовов функций и даже переключаться между потоками, что приводит к несоответствию времён жизни. Если Span или ref struct используются после завершения исходной функции, это может вызвать неопределённое поведение.
⚙️Отсутствие размещения в куче и упаковки (boxing):
Span и ref struct спроектированы для избегания выделения памяти в куче, чтобы минимизировать накладные расходы. Это затрудняет их хранение в структурах данных, основанных на куче, которые часто используются в асинхронных операциях.
Процесс упаковки, то есть преобразования типа значения в ссылочный тип, не поддерживается для Span и ref struct, что ограничивает их использование в асинхронных контекстах.
Возможные обходные пути и альтернативы:
🛠️Использование Memory:
Memory — это эквивалент Span, выделяемый в куче, который можно использовать в асинхронных операциях. Он предоставляет методы для получения экземпляров Span при необходимости.
🛠️Передача указателей:
В некоторых сценариях можно передавать указатели на блоки памяти в асинхронные операции. Однако это требует тщательного управления памятью и может быть менее безопасным по сравнению с использованием Memory.
🛠️Асинхронные потоки:
Для асинхронной передачи данных рассмотрите использование асинхронных потоков. Они могут быть более эффективными и удобными в работе по сравнению с традиционными асинхронными операциями.
⚙️Стековая природа Span и ref struct:
Эти структуры выделяются на стеке, и их время жизни ограничено текущим контекстом выполнения функции.
Асинхронные операции могут охватывать несколько вызовов функций и даже переключаться между потоками, что приводит к несоответствию времён жизни. Если Span или ref struct используются после завершения исходной функции, это может вызвать неопределённое поведение.
⚙️Отсутствие размещения в куче и упаковки (boxing):
Span и ref struct спроектированы для избегания выделения памяти в куче, чтобы минимизировать накладные расходы. Это затрудняет их хранение в структурах данных, основанных на куче, которые часто используются в асинхронных операциях.
Процесс упаковки, то есть преобразования типа значения в ссылочный тип, не поддерживается для Span и ref struct, что ограничивает их использование в асинхронных контекстах.
Возможные обходные пути и альтернативы:
🛠️Использование Memory:
Memory — это эквивалент Span, выделяемый в куче, который можно использовать в асинхронных операциях. Он предоставляет методы для получения экземпляров Span при необходимости.
🛠️Передача указателей:
В некоторых сценариях можно передавать указатели на блоки памяти в асинхронные операции. Однако это требует тщательного управления памятью и может быть менее безопасным по сравнению с использованием Memory.
🛠️Асинхронные потоки:
Для асинхронной передачи данных рассмотрите использование асинхронных потоков. Они могут быть более эффективными и удобными в работе по сравнению с традиционными асинхронными операциями.
👍18
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
👍1
🛠️ Запуск .NET-приложений в облаке с помощью Heroku
Heroku анонсировали официальную поддержку .NET, позволяя разработчикам развертывать приложения на платформе с использованием .NET Core.
Это открывает новые возможности для упрощенного хостинга и масштабирования приложений в облаке.
Процесс деплоя описан буквально двумя строками:
📎 Читайте анонс в блоге Heroku
Heroku анонсировали официальную поддержку .NET, позволяя разработчикам развертывать приложения на платформе с использованием .NET Core.
Это открывает новые возможности для упрощенного хостинга и масштабирования приложений в облаке.
Процесс деплоя описан буквально двумя строками:
heroku create --buildpack heroku/dotnetgit push heroku main
📎 Читайте анонс в блоге Heroku
👍10😁2👏1
🔧 Юнит-тестирование в .NET с xUnit и Moq
Если вы хотите научиться писать качественные юнит-тесты в .NET, но устали от скучных примеров, то эта статья — для вас! Автор делится полезными советами по использованию xUnit и Moq для создания тестов, которые легко поддерживать и которые реально помогают находить ошибки.
В статье вы найдёте множество полезных инсайтов:
🛠️ Мудрое использование xUnit — как грамотно применять фреймворк для написания тестов и организации их выполнения, чтобы тесты были не просто рабочими, но и удобными.
🛠️ Мок-объекты с Moq — создаём мок-объекты для изоляции компонентов и упрощения процесса тестирования, что позволит фокусироваться только на проверке нужных частей системы.
🛠️ Лучшие практики — секреты чистого, удобного и эффективного тестирования, которые сэкономят ваше время и помогут избежать типичных ошибок.
🛠️ Избегаем распространённых ошибок — советы, которые избавят вас от множества проблем и облегчат жизнь при работе с юнит-тестами.
📎 Полезный источник
Если вы хотите научиться писать качественные юнит-тесты в .NET, но устали от скучных примеров, то эта статья — для вас! Автор делится полезными советами по использованию xUnit и Moq для создания тестов, которые легко поддерживать и которые реально помогают находить ошибки.
В статье вы найдёте множество полезных инсайтов:
🛠️ Мудрое использование xUnit — как грамотно применять фреймворк для написания тестов и организации их выполнения, чтобы тесты были не просто рабочими, но и удобными.
🛠️ Мок-объекты с Moq — создаём мок-объекты для изоляции компонентов и упрощения процесса тестирования, что позволит фокусироваться только на проверке нужных частей системы.
🛠️ Лучшие практики — секреты чистого, удобного и эффективного тестирования, которые сэкономят ваше время и помогут избежать типичных ошибок.
🛠️ Избегаем распространённых ошибок — советы, которые избавят вас от множества проблем и облегчат жизнь при работе с юнит-тестами.
📎 Полезный источник
👍10🥱1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❤2🥱1
💡 Работаем с фоновыми задачами в Windows
Хотите автоматизировать задачи с помощью .NET Core? Worker Service — это удобный способ создавать фоновые службы, которые легко интегрируются в экосистему Windows.
Как создать такой сервис, настроить его запуск как Windows-службы и управлять им через командную строку?
📎 Простое и понятное объяснение ждёт вас в статье
Хотите автоматизировать задачи с помощью .NET Core? Worker Service — это удобный способ создавать фоновые службы, которые легко интегрируются в экосистему Windows.
Как создать такой сервис, настроить его запуск как Windows-службы и управлять им через командную строку?
📎 Простое и понятное объяснение ждёт вас в статье
👏3
❓⚙️ .Net для веб-разработки
В последние годы .NET стал мощным инструментом для создания веб-приложений. Он предлагает кросс-платформенность, высокую производительность, удобные инструменты разработки (Blazor, Razor Pages, Web API) и всё это в экосистеме с хорошей документацией и поддержкой.
Однако вокруг .NET всё ещё ходят споры: кто-то видит в нём идеальный стек для веба, а кто-то считает его нишевым решением
Один из пользователей Reddit поднял интересную тему, сравнивая Node.js и .NET в веб-разработке. Основными аргументами в сравнении были производительность, типизация и использование сторонних библиотек.
А как вы считаете недооценён ли .Net для веб-разработки? Делитесь своим мнением!👇
В последние годы .NET стал мощным инструментом для создания веб-приложений. Он предлагает кросс-платформенность, высокую производительность, удобные инструменты разработки (Blazor, Razor Pages, Web API) и всё это в экосистеме с хорошей документацией и поддержкой.
Однако вокруг .NET всё ещё ходят споры: кто-то видит в нём идеальный стек для веба, а кто-то считает его нишевым решением
Один из пользователей Reddit поднял интересную тему, сравнивая Node.js и .NET в веб-разработке. Основными аргументами в сравнении были производительность, типизация и использование сторонних библиотек.
А как вы считаете недооценён ли .Net для веб-разработки? Делитесь своим мнением!👇
👍16🥰2
⚙️ Inline return values в Visual Studio: как новая функция упрощает отладку
Недавнее обновление Visual Studio 2022 (версия 17.12) принесло массу полезных функций, и одна из них — это отображение возвращаемых значений методов прямо в строке кода во время отладки.
С помощью этой функции вы можете мгновенно увидеть, что возвращает функция, не создавая временных переменных или не выполняя дополнительные шаги в процессе отладки. Это особенно удобно при анализе сложных выражений, где результат функции играет ключевую роль.
Преимущества:
✅ Скорость и удобство: мгновенный доступ к возвращаемым значениям без лишних шагов.
✅ Чистота кода: больше не нужно добавлять лишние переменные для промежуточного хранения результата.
✅ Удобство анализа: работает автоматически, что ускоряет процесс отладки.
📎 Подробнее в блоге Visual Studio
Недавнее обновление Visual Studio 2022 (версия 17.12) принесло массу полезных функций, и одна из них — это отображение возвращаемых значений методов прямо в строке кода во время отладки.
С помощью этой функции вы можете мгновенно увидеть, что возвращает функция, не создавая временных переменных или не выполняя дополнительные шаги в процессе отладки. Это особенно удобно при анализе сложных выражений, где результат функции играет ключевую роль.
int CalculateSum(int a, int b) { return a + b; }
// В отладчике сразу видно: возвращаемое значение = 15.
Преимущества:
✅ Скорость и удобство: мгновенный доступ к возвращаемым значениям без лишних шагов.
✅ Чистота кода: больше не нужно добавлять лишние переменные для промежуточного хранения результата.
✅ Удобство анализа: работает автоматически, что ускоряет процесс отладки.
📎 Подробнее в блоге Visual Studio
🔥19👍5🤔1
Forwarded from Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Существует мнение, что высшего образования в сфере разработки игр в России нет, но это не так. В этой большой статье я подробно и честно расскажу о своем опыте обучения на разработчика игр в одном из московских университетов.
👉 Статья
👉 Статья
Привет, друзья! 👋
2024-й год подходит к концу, и мы хотим узнать, какие технологии или инструменты в C# помогли вам добиться успеха в этом году. Какой навык стал для вас ключевым? А какой проект или достижение вы считаете главным успехом?
Мы готовим статью об IT-итогах 2024 году и хотим услышать ваше мнение! 💻 Поделитесь своим мнением, и самое важное и интересное войдет в нашу статью. 🏆
2024-й год подходит к концу, и мы хотим узнать, какие технологии или инструменты в C# помогли вам добиться успеха в этом году. Какой навык стал для вас ключевым? А какой проект или достижение вы считаете главным успехом?
Мы готовим статью об IT-итогах 2024 году и хотим услышать ваше мнение! 💻 Поделитесь своим мнением, и самое важное и интересное войдет в нашу статью. 🏆
🥰3
Форматирование строк в C#: как сделать красиво
Работаете с выводом данных в C#? Хотите, чтобы ваши строки и логи выглядели аккуратно и профессионально? Тогда вам сто́ит изучить возможности форматирования!
Зачем это нужно:
✅ Вывод чисел с нужной точностью;
✅ Форматирование дат;
✅ Локализация валют и чисел для разных стран;
✅ Более удобный способ работы со строками благодаря интерполяции.
📎 Если вам это интересно, загляните в полезный гайд.
Там подробно рассказывается, как использовать string.Format, интерполяцию и даже управлять региональными настройками.
Работаете с выводом данных в C#? Хотите, чтобы ваши строки и логи выглядели аккуратно и профессионально? Тогда вам сто́ит изучить возможности форматирования!
Зачем это нужно:
✅ Вывод чисел с нужной точностью;
✅ Форматирование дат;
✅ Локализация валют и чисел для разных стран;
✅ Более удобный способ работы со строками благодаря интерполяции.
📎 Если вам это интересно, загляните в полезный гайд.
Там подробно рассказывается, как использовать string.Format, интерполяцию и даже управлять региональными настройками.
👍7🥰6👏3
💡 Автоматизируем обновление .NET SDK с Dependabot
Теперь обновлять .NET SDK стало проще: Microsoft объясняет, как настроить Dependabot для работы с файлом global.json. Эта интеграция помогает поддерживать проекты актуальными, повышает их безопасность и снижает технический долг.
Вы сами определяете частоту проверок, выбираете, какие версии обновлять (включая preview), и автоматизируете управление зависимостями NuGet. Это удобный инструмент для разработчиков, которым важна стабильность и простота.
📎 Читайте подробности в блоге .Net
Теперь обновлять .NET SDK стало проще: Microsoft объясняет, как настроить Dependabot для работы с файлом global.json. Эта интеграция помогает поддерживать проекты актуальными, повышает их безопасность и снижает технический долг.
Вы сами определяете частоту проверок, выбираете, какие версии обновлять (включая preview), и автоматизируете управление зависимостями NuGet. Это удобный инструмент для разработчиков, которым важна стабильность и простота.
📎 Читайте подробности в блоге .Net
🔥16👍1
🔄 Как не превратить кодовую базу в легаси?
Чтобы ваш проект оставался актуальным, нужно подходить к его развитию системно. В статье и видео Грега Янковича подчеркиваются три ключевых подхода:
1️⃣ Выбор технологий. Используйте стабильные и проверенные библиотеки, фреймворки и платформы. Это снижает вероятность больших изменений в будущем.
2️⃣ Работа с зависимостями. Локализуйте их влияние на проект через абстракции и тщательно управляйте их обновлениями.
3️⃣ Постепенные улучшения. Регулярно обновляйте код, делая небольшие улучшения — это легче, чем глобальная переработка.
📺 Видео
📄 Статья
Чтобы ваш проект оставался актуальным, нужно подходить к его развитию системно. В статье и видео Грега Янковича подчеркиваются три ключевых подхода:
1️⃣ Выбор технологий. Используйте стабильные и проверенные библиотеки, фреймворки и платформы. Это снижает вероятность больших изменений в будущем.
2️⃣ Работа с зависимостями. Локализуйте их влияние на проект через абстракции и тщательно управляйте их обновлениями.
3️⃣ Постепенные улучшения. Регулярно обновляйте код, делая небольшие улучшения — это легче, чем глобальная переработка.
📺 Видео
📄 Статья
👍6😁5
🚀 .NET 9 отказывается от встроенного Swagger
С выходом .NET 9 Microsoft отказалась от интеграции Swagger в шаблоны Web API, что повлекло за собой значительные изменения в создании документации.
Вместо Swagger теперь используется библиотека Microsoft.AspNetCore.OpenApi, которая поддерживает OpenAPI-спецификацию, но без встроенного визуального интерфейса.
Это открывает новые возможности для кастомизации и гибкости, позволяя адаптировать решение под специфические нужды.
Что делать, если нужен UI:
1️⃣ Добавить Swagger вручную;
2️⃣ Использовать NSwag или другие инструменты;
3️⃣ Создать кастомное решение для документации.
С выходом .NET 9 Microsoft отказалась от интеграции Swagger в шаблоны Web API, что повлекло за собой значительные изменения в создании документации.
Вместо Swagger теперь используется библиотека Microsoft.AspNetCore.OpenApi, которая поддерживает OpenAPI-спецификацию, но без встроенного визуального интерфейса.
Это открывает новые возможности для кастомизации и гибкости, позволяя адаптировать решение под специфические нужды.
Что делать, если нужен UI:
1️⃣ Добавить Swagger вручную;
2️⃣ Использовать NSwag или другие инструменты;
3️⃣ Создать кастомное решение для документации.
😢53👍8🎉1
🔧 .NET MAUI — будущее кроссплатформенной разработки!
.NET MAUI (Multi-platform App UI) — это мощный фреймворк для кроссплатформенной разработки, представленный Microsoft как преемник Xamarin.Forms. Он позволяет создавать приложения для Android, iOS, macOS и Windows из единой кодовой базы, предлагая улучшенную производительность, оптимизированный рабочий процесс и расширенные возможности для работы с UI.
Основные преимущества использования .NET MAUI включают:
✅ Единая кодовая база: все приложение пишется один раз и работает на разных платформах, что экономит время и ресурсы по сравнению с созданием отдельных кодов для каждой платформы
✅ Нативная производительность: .NET MAUI использует нативные элементы управления, что обеспечивает эффективность работы и бесшовный пользовательский опыт с уникальным интерфейсом для каждой платформы
✅ Повышенная производительность: такие функции, как Hot Reload, позволяют разработчикам видеть изменения в реальном времени, ускоряя процесс прототипирования и итераций
✅ Богатые UI-элементы: фреймворк предоставляет множество элементов управления, что упрощает создание сложных и визуально привлекательных интерфейсов
✅ Кроссплатформенная совместимость: благодаря интеграции с Blazor разработчики могут повторно использовать код и библиотеки для нативных и веб-приложений
Кроме того, .NET MAUI прекрасно интегрируется с экосистемой .NET, что позволяет разработчикам использовать уже знакомые инструменты и библиотеки. Это делает его привлекательным выбором для компаний, стремящихся оптимизировать разработку приложений для разных платформ
.NET MAUI (Multi-platform App UI) — это мощный фреймворк для кроссплатформенной разработки, представленный Microsoft как преемник Xamarin.Forms. Он позволяет создавать приложения для Android, iOS, macOS и Windows из единой кодовой базы, предлагая улучшенную производительность, оптимизированный рабочий процесс и расширенные возможности для работы с UI.
Основные преимущества использования .NET MAUI включают:
✅ Единая кодовая база: все приложение пишется один раз и работает на разных платформах, что экономит время и ресурсы по сравнению с созданием отдельных кодов для каждой платформы
✅ Нативная производительность: .NET MAUI использует нативные элементы управления, что обеспечивает эффективность работы и бесшовный пользовательский опыт с уникальным интерфейсом для каждой платформы
✅ Повышенная производительность: такие функции, как Hot Reload, позволяют разработчикам видеть изменения в реальном времени, ускоряя процесс прототипирования и итераций
✅ Богатые UI-элементы: фреймворк предоставляет множество элементов управления, что упрощает создание сложных и визуально привлекательных интерфейсов
✅ Кроссплатформенная совместимость: благодаря интеграции с Blazor разработчики могут повторно использовать код и библиотеки для нативных и веб-приложений
Кроме того, .NET MAUI прекрасно интегрируется с экосистемой .NET, что позволяет разработчикам использовать уже знакомые инструменты и библиотеки. Это делает его привлекательным выбором для компаний, стремящихся оптимизировать разработку приложений для разных платформ
😁31👍13🌚2😢1👾1
🧩 Может ли строка в C# изменяться?
В статье предлагается решить задачу, в которой нужно изменить строку «Merry Christmas» на «Advent of C#». Это исследование неизменяемости строк в .NET с использованием небезопасного кода и манипуляций с памятью. Также рассматривается элегантное решение через MemoryMarshal. Задача демонстрирует, как работать с внутренними аспектами строк в C#.
📎 Читайте подробности
В статье предлагается решить задачу, в которой нужно изменить строку «Merry Christmas» на «Advent of C#». Это исследование неизменяемости строк в .NET с использованием небезопасного кода и манипуляций с памятью. Также рассматривается элегантное решение через MemoryMarshal. Задача демонстрирует, как работать с внутренними аспектами строк в C#.
📎 Читайте подробности
👍15
Тест: 🐍 Насколько ты продвинутый питонист?
Устали от многословных конструкций .NET? Проверьте, насколько быстро вы сможете адаптироваться к питоновской магии кода. Тест — ваш шанс блеснуть универсальностью и гибкостью мышления.
📎 Пройти тест
Устали от многословных конструкций .NET? Проверьте, насколько быстро вы сможете адаптироваться к питоновской магии кода. Тест — ваш шанс блеснуть универсальностью и гибкостью мышления.
📎 Пройти тест
🥰5🥱5😁2🌚2
🚀 Понимание паттерна Transactional Outbox
Что такое Transactional Outbox?
Transactional Outbox — это архитектурный паттерн, который гарантирует надежную доставку сообщений в системах, где нужно сохранить данные в базе и отправить асинхронные уведомления.
❓Что делает паттерн?
✅ Гарантирует отправку сообщений только после успешной транзакции в базе данных
✅ Предотвращает потерю сообщений при неожиданных остановках системы
✅ Обрабатывает сетевые проблемы и недоступность брокеров сообщений
✅ Предотвращает состояния гонки в распределенных системах
Пример:
Что такое Transactional Outbox?
Transactional Outbox — это архитектурный паттерн, который гарантирует надежную доставку сообщений в системах, где нужно сохранить данные в базе и отправить асинхронные уведомления.
❓Что делает паттерн?
✅ Гарантирует отправку сообщений только после успешной транзакции в базе данных
✅ Предотвращает потерю сообщений при неожиданных остановках системы
✅ Обрабатывает сетевые проблемы и недоступность брокеров сообщений
✅ Предотвращает состояния гонки в распределенных системах
Пример:
c#
// Сохранение заказа
var order = new Order { Id = orderId, Amount = amount, Status = «Placed» };
_context.Orders.Add(order);
// Сохранение сообщения в Outbox
var message = new OutboxMessage
{
Id = Guid.NewGuid(),
Type = nameof(OrderPlaced),
Payload = JsonSerializer.Serialize(new { OrderId = orderId, Amount = amount }),
CreatedAt = DateTime.UtcNow,
Processed = false
};
_context.OutboxMessages.Add(message);
await _context.SaveChangesAsync();
// Завершение транзакции
await transaction.CommitAsync();
👍22❤2👏1😁1👾1