В данной статье описываются новые методы оптимизации кэширования в ASP.NET Core. Благодаря им, работа с кэшем становится более понятной и надежной. Вам будет представлена информация о упрощенном процессе сериализации объектов и рекомендации, позволяющие сосредоточиться на основной функциональности.
📌 Читать
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Бенчмарки .NET 8 FrozenDictionary ⬇.
В приведенном ниже бенчмарке скорость чтения на 68% выше, чем у обычного словаря 🔥 ...
Значительное улучшение времени работы с .NET 8 Preview 1 по сравнению с Preview 7. FrozenDictionary (и FrozenSet) теперь подходят для гораздо большего числа случаев использования.
Разбор с сайта MS devblogs в начале этого года ->
https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-1/comment-page-2/#comment-17478
@csharp_1001_notes
В приведенном ниже бенчмарке скорость чтения на 68% выше, чем у обычного словаря 🔥 ...
Значительное улучшение времени работы с .NET 8 Preview 1 по сравнению с Preview 7. FrozenDictionary (и FrozenSet) теперь подходят для гораздо большего числа случаев использования.
Разбор с сайта MS devblogs в начале этого года ->
https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-1/comment-page-2/#comment-17478
@csharp_1001_notes
Популярной библиотекой тестирования в .NET, поддерживающей параметризованное тестирование, является
xUnit
. В ней для определения тестовых методов используются атрибуты. Атрибут Fact определяет простой тест, а атрибут Theory - параметризованный тест.В этой статье показано четыре способа написания параметризованных тестов с помощью xUnit.
https://www.milanjovanovic.tech/blog/creating-data-driven-tests-with-xunit
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
С версии C# 10 можно отказаться от ненужного блочного оператора вокруг объявления пространства имен.
Просто и эффективно.
Это стандарт для всех моих проектов.
И даже есть возможность очистки кода в Visual Studio.
А вы используете эту фичу?
Репост = Отправьте другу, чтобы избавить его от нагромождений в коде♻️
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Что такое сетевая привязка (Session affinity)?
Сетевая привязка широко используется в сценариях балансировки нагрузки, когда несколько экземпляров API обслуживают запросы.
Сетевая привязка - это способ привязать последовательность запросов к определенному месту назначения API.
Как правило, к тому, который обработал первый запрос.
Например, в качестве балансировщика нагрузки или API-шлюза можно использовать обратный прокси YARP.
Чтобы включить сродство сессий, достаточно определить соответствующий параметр
Вот как начать работу с YARP: https://www.milanjovanovic.tech/blog/implementing-an-api-gateway-for-microservices-with-yarp
@csharp_1001_notes
Сетевая привязка широко используется в сценариях балансировки нагрузки, когда несколько экземпляров API обслуживают запросы.
Сетевая привязка - это способ привязать последовательность запросов к определенному месту назначения API.
Как правило, к тому, который обработал первый запрос.
Например, в качестве балансировщика нагрузки или API-шлюза можно использовать обратный прокси YARP.
Чтобы включить сродство сессий, достаточно определить соответствующий параметр
SessionAffinity
в конфигурации JSON.Вот как начать работу с YARP: https://www.milanjovanovic.tech/blog/implementing-an-api-gateway-for-microservices-with-yarp
@csharp_1001_notes
⚡️ Вы когда-нибудь хотели, чтобы #Blazor мог моделировать привязку и валидацию HTTP-формы в режиме рендеринга на стороне сервера?
Попробуйте атрибут [𝚂𝚞𝚙𝚙𝚕𝚢𝙿𝚊𝚛𝚊𝚖𝚎𝚝𝚎𝚛𝙵𝚛𝚘𝚖𝙵𝚘𝚛𝚖].
Готовы попробовать? Посмотрите это пошаговое руководство.
@csharp_1001_notes
Попробуйте атрибут [𝚂𝚞𝚙𝚙𝚕𝚢𝙿𝚊𝚛𝚊𝚖𝚎𝚝𝚎𝚛𝙵𝚛𝚘𝚖𝙵𝚘𝚛𝚖].
Готовы попробовать? Посмотрите это пошаговое руководство.
@csharp_1001_notes
Одним из моих любимых способов реализации паттерна
@csharp_1001_notes
Options
является использование подхода `IConfigureOptions`.Вот как его можно использовать:@csharp_1001_notes
𝗖𝗹𝗲𝗮𝗻 𝗰𝗼𝗱𝗲 𝘁𝗶𝗽 : как объединить вложенные операторы IF в одно условие.
Это простое изменение может улучшить читаемость вашего кода.
Но что такое чистый код в первую очередь?
Чистый код — это код, который:
- Легко читать
- Просто обслуживать
- Легко понять
Я считаю написание чистого кода навыком.
И это навык, который вы можете изучить и улучшить путем практики.
Общий принцип, лежащий в основе этого, называется принципом «раннего возврата».
Ранний возврат означает, что вы должны вернуться из метода, как только будут выполнены условия.
В исходном примере:
- Вложение условий увеличивает сложность
- Вложенность затрудняет анализ кода.
Решение состоит в том, чтобы объединить вложенные операторы IF в одно логическое выражение.
Я достиг этого, используя сопоставление с образцом в одном примере.
Или вы можете предоставить метод, который оборачивает условие и возвращает логическое значение.
Это простое изменение может улучшить читаемость вашего кода.
Но что такое чистый код в первую очередь?
Чистый код — это код, который:
- Легко читать
- Просто обслуживать
- Легко понять
Я считаю написание чистого кода навыком.
И это навык, который вы можете изучить и улучшить путем практики.
Общий принцип, лежащий в основе этого, называется принципом «раннего возврата».
Ранний возврат означает, что вы должны вернуться из метода, как только будут выполнены условия.
В исходном примере:
- Вложение условий увеличивает сложность
- Вложенность затрудняет анализ кода.
Решение состоит в том, чтобы объединить вложенные операторы IF в одно логическое выражение.
Я достиг этого, используя сопоставление с образцом в одном примере.
Или вы можете предоставить метод, который оборачивает условие и возвращает логическое значение.
Используете ли вы ключевое слово required в свойствах(properties)?
Начиная с C# 11 мы можем добавлять ключевое слово
Это дает несколько преимуществ
- Меньше шансов на ошибку
- Избавляет от кода валидации
- Позволяет сделать свойства обязательным.
Компилятор выдаст ошибку, если вы не инициализируете это свойство.
Начиная с C# 11 мы можем добавлять ключевое слово
required
в свойства, что заставит инициализировать это свойство при создании объекта.Это дает несколько преимуществ
- Меньше шансов на ошибку
- Избавляет от кода валидации
- Позволяет сделать свойства обязательным.
Компилятор выдаст ошибку, если вы не инициализируете это свойство.
Интерактивная игровая площадка LINQ ⬇
LINQ Marbles - это новый сайт, работа над которым продолжается и который должен помочь нам понять, как работают различные операторы LINQ при заданном наборе элементов.
Создан Стивеном Гизелем (Steven Giesel).
https://linqmarbles.info/
LINQ Marbles - это новый сайт, работа над которым продолжается и который должен помочь нам понять, как работают различные операторы LINQ при заданном наборе элементов.
Создан Стивеном Гизелем (Steven Giesel).
https://linqmarbles.info/
🔥 Алгоритмы, которые вы должны знать, прежде чем проходить собеседования по системному проектированию
Эти алгоритмы полезны не только на собеседованиях, но и полезны для понимания любому инженеру-программисту.
Следует помнить, что понимание того, "как эти алгоритмы используются в реальных системах", обычно важнее, чем детали реализации на собеседовании по проектированию систем.
Что означают звездочки на диаграмме?
Пять звезд: Очень важно знать. Постарайстесь понять, как это работает и почему.
Три звезды: Важны в некоторой степени. Возможно, вам не нужно знать детали реализации.
Одна звезда: Продвинутый. Полезно знать Senior кандидатам.
Эти алгоритмы полезны не только на собеседованиях, но и полезны для понимания любому инженеру-программисту.
Следует помнить, что понимание того, "как эти алгоритмы используются в реальных системах", обычно важнее, чем детали реализации на собеседовании по проектированию систем.
Что означают звездочки на диаграмме?
Пять звезд: Очень важно знать. Постарайстесь понять, как это работает и почему.
Три звезды: Важны в некоторой степени. Возможно, вам не нужно знать детали реализации.
Одна звезда: Продвинутый. Полезно знать Senior кандидатам.
Рефлексия с#
С выходом новых версий "net" у многих пользователей вновь появились вопросы о рефлексии на с#. Даже опытные программисты забыли о её существовании.
Давайте же вспомним основные возможности рефлексии на c#:
▪️Рефлексия в C# позволяет получить информацию о типе объекта, например, его имя, базовый класс, реализованные интерфейсы, методы, свойства и поля.
▪️Позволяет создать экземпляр объекта даже без знания его типа во время компиляции. Она предоставляет возможность создавать объекты динамически и задавать значения их свойств и полей.
▪️Вызов методов и доступ к полям
▪️Динамическое создание типов
▪️Рефлексия позволяет динамически загружать и разрешать сборки, а также получать доступ к типам и объектам, определенным в этих сборках.
❗️Однако, использование рефлексии может снизить производительность программы, поэтому следует применять ее с осторожностью и только там, где это действительно необходимо. ❗️
С выходом новых версий "net" у многих пользователей вновь появились вопросы о рефлексии на с#. Даже опытные программисты забыли о её существовании.
Давайте же вспомним основные возможности рефлексии на c#:
▪️Рефлексия в C# позволяет получить информацию о типе объекта, например, его имя, базовый класс, реализованные интерфейсы, методы, свойства и поля.
▪️Позволяет создать экземпляр объекта даже без знания его типа во время компиляции. Она предоставляет возможность создавать объекты динамически и задавать значения их свойств и полей.
▪️Вызов методов и доступ к полям
▪️Динамическое создание типов
▪️Рефлексия позволяет динамически загружать и разрешать сборки, а также получать доступ к типам и объектам, определенным в этих сборках.
❗️Однако, использование рефлексии может снизить производительность программы, поэтому следует применять ее с осторожностью и только там, где это действительно необходимо. ❗️
💥F# 8 был выпущен в рамках dotNET8.💥
Net8 содержит множеств обновлений и новых фич.
Так же много интерсных обновлений выпущены для F#8.
Подробнее об обновлении можно прочитать здесь:
📌Читать далее
@csharp_1001_notes
Net8 содержит множеств обновлений и новых фич.
Так же много интерсных обновлений выпущены для F#8.
Подробнее об обновлении можно прочитать здесь:
📌Читать далее
@csharp_1001_notes
ℹ️Доменные моделиℹ️
Доменная Модель - это система абстракций, которая описывает выбранные аспекты предметной области (домена) и может быть использована для решения проблем относящихся к этой предметной области.
Существует 2 вида доменных моделей.
В Domain-Driven Design вы переносите логику в домен.
Объекты домена содержат богатое поведение и инкапсулируют правила.
Важные части логики и правил находятся в одном месте.
Это повышает согласованность и упрощает добавление новых функций.
Но как разработать богатую модель домена? ❓
Это бесконечный процесс переноса логики в домен и уточнения модели домена.
Отличный способ изучить DDD и то, как разрабатывать модели домена, - это рефакторинг существующих сценариев использования.
Вы выделяете часть логики, которая должна быть перенесена в домен.
Затем вы "проталкиваете" эту логику в объекты домена.
@csharp_1001_notes
Доменная Модель - это система абстракций, которая описывает выбранные аспекты предметной области (домена) и может быть использована для решения проблем относящихся к этой предметной области.
Существует 2 вида доменных моделей.
В Domain-Driven Design вы переносите логику в домен.
Объекты домена содержат богатое поведение и инкапсулируют правила.
Важные части логики и правил находятся в одном месте.
Это повышает согласованность и упрощает добавление новых функций.
Но как разработать богатую модель домена? ❓
Это бесконечный процесс переноса логики в домен и уточнения модели домена.
Отличный способ изучить DDD и то, как разрабатывать модели домена, - это рефакторинг существующих сценариев использования.
Вы выделяете часть логики, которая должна быть перенесена в домен.
Затем вы "проталкиваете" эту логику в объекты домена.
@csharp_1001_notes
https://devblogs.microsoft.com/dotnet/dotnet-8-networking-improvements/ #aspnetcore
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
BenchmarkDotNet поможет вам превратить методы в бенчмарки, отслеживать их производительность и делиться экспериментами по измерениям. Это не сложнее, чем писать модульные тесты!
Под капотом программы происходит много волшебства, которое гарантирует надежные и точные результаты благодаря статистическому движку
perfolizer
. BenchmarkDotNet защищает вас от многих ошибок бенчмаркинга и предупреждает, если что-то не так с кодом бенчмарка или полученными измерениями.
Результаты представлены в удобной для пользователя форме, которая подчеркивает все важные выводы о вашем эксперименте.
BenchmarkDotNet
уже используется в 18700+ проектах GitHub, включая .NET Runtime, .NET Compiler, .NET Performance и многие другие.▪Github
▪Почитать
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM