Channel: C# 1001 notes
Используете ли вы ключевое слово 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
Обсуждение дизайна языка: Если вы языковой гик или просто интересуетесь тем, как развивается
C#
, обратите внимание на этот репозиторий!https://github.com/dotnet/csharplang/
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
И как просто реализовать API с ограничением запросов?
Вы можете решить обе проблемы с помощью функции
RateLimitPartition
.Если вы используете .NET 7, вам не нужны сторонние библиотеки.
Все необходимые инструменты уже готовы для работы .
- Выберите алгоритм ограничения скорости
- Создайте политику ограничения скорости с разделением на части
- Примените ее к обратному прокси-серверу или определенным эндпоинтам.
Ограничение скорости по IP отлично подходит для неаутентифицированных пользователей.
Используйте правильный IP-адрес, если ваш API находится на обратном прокси.
Иначе вы можете ограничить скорость обратного прокси.
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
https://weblog.west-wind.com/posts/2023/Dec/21/Integrating-OpenAI-image-generation-into-your-NET-Application
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
Программа на C#, которая позволяет создавать резервные копии и восстанавливать наиболее важные параметры и настройки Windows в автономном режиме и локально.
▪ Github
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
Откройте для себя распространенные антишаблоны архитектуры, узнайте, как их избегать и преодолевать "подводные камни" проектирования!
Антипаттерн (англ. anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным. В отличие от шаблона проектирования, рассмотрение антипаттерна включает в себя как неправильное решение проблемы с его признаками и последствиями, так и выход из ситуации.
В этом проекте собраны ценные сведения, практические советы и примеры из реальных проектов для обучения и помощи в создании лучших программных архитектур и улучшать существующие.
▪Проект
▪Github
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Используете ли вы чистые SQL-запросы в Entity Framework?
EF Core и SQL
В EF8 чистые SQL-запросы могут возвращать любой тип без необходимости включать его в модель EF.
Можно запрашивать несопоставленные типы с помощью методов S
Метод
, при этом вам не нужно создавать новые сущности в вашей модели данных.
Вот 4-минутное руководство по работе с запросами.
@csharp_1001_notes
EF Core и SQL
В EF8 чистые SQL-запросы могут возвращать любой тип без необходимости включать его в модель EF.
Можно запрашивать несопоставленные типы с помощью методов S
qlQuery и SqlQueryRaw.
Метод
SqlQuery
использует интерполяцию строк для параметризации запроса, при этом вам не нужно создавать новые сущности в вашей модели данных.
Вот 4-минутное руководство по работе с запросами.
@csharp_1001_notes
⚡️ Дорожная карта разработчиков .NET/C# в 2024 году для начинающих
https://uproger.com/dorozhnaya-karta-razrabotchikov-net-v-2024-godu-dlya-nachinayushhih/
@csharp_1001_notes
https://uproger.com/dorozhnaya-karta-razrabotchikov-net-v-2024-godu-dlya-nachinayushhih/
@csharp_1001_notes
Не смотря на простоту концепции, детали реализации CQRS могут значительно отличаться. И это именно тот случай, когда дьявол кроется в деталях.
Самая большое заблуждение о CQRS:
- Вам нужны отдельные базы данных для чтения и записи ❌.
Правда в том, что вы можете иметь одну базу данных при использовании CQRS.
Вот что на самом деле представляет собой CQRS:
https://www.milanjovanovic.tech/blog/cqrs-pattern-with-mediatr
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
https://www.milanjovanovic.tech/blog/how-to-easily-create-pdf-documents-in-aspnetcore
@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
http://ASP.NET Core
:@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
Aspir8 (aspire для Kubernetes) поддерживает создание файла docker compose из манифеста aspire!
https://prom3theu5.github.io/aspirational-manifests/getting-started.html
@csharp_1001_notes
https://prom3theu5.github.io/aspirational-manifests/getting-started.html
@csharp_1001_notes
Улучшение производительности JsonSerializer в .NET 8
В .
Посмотрите на цифры на скриншоте 🚀
https://github.com/dotnet/runhottg.com/pull/78646
@csharp_1001_notes
В .
NET
8 делегаты быстрого пути сериализации используются во многих местах.Посмотрите на цифры на скриншоте 🚀
https://github.com/dotnet/runhottg.com/pull/78646
@csharp_1001_notes
HTML Embed Code: