Обновить
81.76

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

Способы создания экземпляра наследника класса в зависимости от данных

Уровень сложностиПростой
Время на прочтение2 мин
Просмотры1.5K

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

В голову пришло три способа организации:

Читать далее

Отправка сообщения в ДМДК через stunnel на С#

Уровень сложностиСредний
Время на прочтение6 мин
Просмотры1.5K

Задача - у нас есть розничные продажи и нам надо отправлять информацию о них в госсистему ДМДК.

Как зарегистрироваться в ДМДК и настроить stunnel я напишу отдельную статью, считаем что он есть, настроен и работает. Соответственно у нас еть ЭЦП, все необходимые сертификаты зарегистрированы.

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

Решаем передавать каждый чек как отдельное сообщение, благо их в день не много и можно передавать не сразу, а в течение нескольких дней после продажи. Передавать будем в фоне асинхронно, и пытаться передать до тех пор пока ДМДК не съест (иногда она глючит, иногда не работает, иногда на профилактике)

Читать далее

Проверяем зачисление в ВУЗ через телеграм бота

Уровень сложностиПростой
Время на прочтение9 мин
Просмотры2.4K

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

В какой-то момент мне это надоело, и я вспомнил, что я – разработчик, в конце концов, поэтому зачем что-то проверять руками, если это можно автоматизировать? Собственно, так и пришла в голову идея о простом разовом проекте, который будет регулярно стучать на сайт, проверять статус зачисления и, в случае изменения, присылать радостное сообщение в телеграм.

Читать далее

Entity Framework c предустановленной БД в вашем приложении на .NET MAUI

Уровень сложностиСредний
Время на прочтение3 мин
Просмотры1.5K

Данный текст является логичным продолжением статьи Entity Framework c Code-First миграциями для .NET MAUI. В ней рассказывалось как подключить и использовать, возможно, уже привычную вам по работе с апи технологию работы с БД Entity Framework теперь в вашем мобильном приложении.


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


Итак, допустим, в процессе разработки мы заполнили БД нужными вам значениями и теперь вы хотите чтобы они были доступны всем пользователям. Покажем на примере.


Кладем ваш файл базы данных в Resources/Raw/Db/app.db3 — Build Action: MauiAsset. Замечательно, файл уже с нами.


Теперь, чтобы его реально использовать при исполнении приложения, надо

Читать дальше →

.NET Digest #3

Время на прочтение4 мин
Просмотры5.9K

Добро пожаловать на третий выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

Что будет, если скрестить конструирование компиляторов, DDD и Clean Architecture? Опыт HydraScript

Уровень сложностиСредний
Время на прочтение12 мин
Просмотры6.6K


В этой статье я расскажу о двухлетнем эксперименте, проводимом над моим пет-проектом, интерпретатором ЯП HydraScript. Почему к разработке из области системного программирования были применены промышленные практики, и зачем конструированию компиляторов нужен Domain Driver Design с чистой архитектурой?

Исходники проекта
Читать дальше →

Как на C# написать программу в одно выражение?

Уровень сложностиПростой
Время на прочтение4 мин
Просмотры9.5K

Попалась на Stack Overflow интересная задачка: написать программу как можно короче и в одну строку. Что подразумевается под одной строкой? Это значит использовать только один оператор (statement) верхнего уровня с точкой с запятой в конце и не использовать блоки кода. Вложенные операторы допускаются.

Читать далее

Деплой .NET приложений для самых маленьких. Часть 2. Github Actions

Уровень сложностиПростой
Время на прочтение8 мин
Просмотры4.4K

В прошлой статье мы рассмотрели чрезвычайно популярный инструмент для выкатки приложений Jenkins. Мы подружили его через плагины с SSH, с GitHub, построили простой пайплайн с помощью Groovy. И вроде все здорово, все работает как должно, но все равно есть ощущение, что можно сделать лучше. И действительно, наш процесс можно улучшить, перестав проводить сборку на VPS.

Ранее для сборки мы использовали агент Jenkins, который был установлен на нашем хостинге, где и происходила сборка приложения и его выкатка. Конечно, в реальных проектах существует больше одного боевого сервера, существуют промежуточные серверы – тестовые, демо, стейдж. Не всегда и везде, конечно, но когда у вас несколько серверов, то и сборку приложений можно проводить на каких-то промежуточных, а после всех тестов и проверок, рабочее собранное приложение доставлять до прода. Но у нас все по простому, сразу в прод и агент был там же.

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

Читать далее

Вычислительные выражения в F#

Уровень сложностиСложный
Время на прочтение1 мин
Просмотры1.8K

Цикл из одиннадцати статей Скотта Влащина, посвящённый вычислительным выражениям (computation expressions) в F#.

Читать далее

Вычислительные выражения: Оставшиеся стандартные методы

Уровень сложностиСложный
Время на прочтение8 мин
Просмотры607

Скотт Влащин завершает рассказ о вычислительных выражениях в F#.

Сегодня поговорим про методы класса-построителя, с которыми мы ещё не сталкивались.

Читать далее

Вычислительные выражения: Добавляем ленивость

Уровень сложностиСложный
Время на прочтение7 мин
Просмотры934

Скотт Влащин продолжает рассказ о вычислительных выражениях в F#.

Сегодня мы узнаем, как создавать ленивые вычислительные выражения.

Читать далее

Заметки по сериализации + System.Text.Json

Уровень сложностиСредний
Время на прочтение31 мин
Просмотры8.5K

Сериализация - важнейший механизм любого приложения, от поиска по фильтрам в онлайн магазинах, до сохранения прогресса в играх. Давайте коротко пройдемся по основным форматам сериализации и рассмотрим использование System.Text.Json.

Читать далее

Апгрейд с Xamarin.Native на .NET 8

Уровень сложностиПростой
Время на прочтение7 мин
Просмотры3K

Для тех, кто занят в кроссплатформенной мобильной разработке на Xamarin не секрет, что Microsoft прекратил поддержку этой платформы и выкатил обновленную реализацию на чистом .NET. Речь о .NET Android, .NET iOS, MAUI и т.д. Поначалу мне казалось, ну сделали и сделали, что такого может случиться, но как это бывает беда всё же пришла.

Читать далее

Ближайшие события

Практическая реализация современной аутентификации на платформе .NET: OpenID Connect, шаблон BFF и SPA

Уровень сложностиСредний
Время на прочтение34 мин
Просмотры8K

Построение современной и надежной системы аутентификации — задача, которая требует тщательного подхода. В огромном количестве информации легко запутаться: многие материалы представлены в неструктурированном виде, а часть из них и вовсе описывает устаревшие или даже небезопасные в настоящее время методы и подходы. К тому же каноническое описание шаблона Backend-For-Frontend (BFF) довольно абстрактно и вызывает сложности в практической реализации у многих разработчиков.

Это подтолкнуло меня создать подробное и максимально доступное руководство, посвященное реализации современного подхода к аутентификации на платформе .NET с использованием OpenID Connect, архитектурного шаблона Backend-For-Frontend (BFF) и распределению ответственности между одностраничным приложением (SPA) на React и серверным API.

В статье рассматриваются ключевые аспекты настройки аутентификации, такие как использование потока Authorization Code с Proof Key for Code Exchange (PKCE) и интеграция его с одностраничными приложениями (SPA) на React. Приведены примеры на базе .NET и React, включающие пошаговые инструкции по настройке клиента OpenID Connect и BFF, а также демонстрируется использование библиотеки YARP для проксирования запросов к внешним API. В результате выполнения инструкций вы самостоятельно создадите полнофункциональное приложение с безопасной аутентификацией и надежным взаимодействием с внешними сервисами и разберетесь в его внутреннем устройстве и взаимодействии с другими сервисами.

Читать далее

Что на DotNext 2024 расскажут о практиках .NET-разработки, архитектуре, «кишочках» .NET и не только

Время на прочтение14 мин
Просмотры3.3K

До конференции DotNext 2024 осталась всего пара недель, и уже хорошо известно обо всех докладах, которые там будут. Все они делятся на четыре основных категории:

Best practices: скажем, «Как собирать проекты просто» или «Как использовать АОП в .NET»
Архитектура: например, про DDD или Serverless
Internals: как в .NET всё устроено «под капотом»
«Расширяем горизонты»: всё, что не подходит предыдущим категориям, но тоже полезно дотнетчикам. Например, знали ли вы, что «монады есть у нас дома», то есть в .NET есть аналог этой концепции?

Темы бывают и фундаментальными, вроде «Асинхронность за пределами async/await», и экзотическими, вроде «.NET для чайников» (ну то есть физических чайников с кухни). И вишенкой на всём этом — выступление о саморазвитии от Максима Дорофеева, который хорошо известен многим разработчикам своими материалами о продуктивности.

В этом посте — описания сразу всех докладов, разделённые на эти четыре блока:

Читать далее

Вычислительные выражения: Перегрузка

Уровень сложностиСложный
Время на прочтение7 мин
Просмотры976

Скотт Влащин продолжает рассказ о вычислительных выражениях в F#.

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

Читать далее

Телеграм бот на C# с использованием Yandex Cloud Functions

Уровень сложностиСредний
Время на прочтение10 мин
Просмотры6.1K

Всем привет!

Данная статья содержит информация о том, как написать телеграм бота на C# с использованием Yandex Cloud Functions и Телеграм Webhook. Также в данной статье будет рассмотрено CI/CD с помощью GitHub Actions.

P.S. полезная литература находится в ссылках!

Читать далее

Заглядываем под капот FrozenDictionary: насколько он быстрее Dictionary и почему

Уровень сложностиСредний
Время на прочтение9 мин
Просмотры17K

С релизом .NET 8 в арсенале C# разработчиков появилась новая коллекция – FrozenDictionary. Особенность этого словаря в том, что он неизменяемый, но при этом обеспечивает более быстрое чтение по сравнению с обычным Dictionary. Я неспроста разбил результаты на обложке по типам – используемые во FrozenDictionary алгоритмы сильно зависят от типа ключа, размера словаря или даже, например, количества строковых ключей одинаковой длины. В этой статье подробно разберем, насколько FrozenDictionary быстрее и почему.

Заглянуть под капот

Вот скажи мне, микросервис, в чем сила (часть 2)

Уровень сложностиПростой
Время на прочтение9 мин
Просмотры5.4K

Если вы не читали начало - то оно здесь.

Вкратце же, там я описал как начал строить свой “интернет магазин электроники”. Да, именно в кавычках 🙂. Потому что это не магазин совсем, а эксперименты по реализации части механик. Конкретно, подбора товаров по параметрам. Запустил первый блин комом и сейчас буду наш первый блин улучшать.

В любом случае, первую часть будет полезно почитать хотя бы из-за дельных комментариев (как всегда на Хабре). Там любезно объяснили, что этому всему есть научный термин - фасетный поиск. И что данная реализация соответствует паттерну EAV. Да и вообще этот велосипед уже изобрели. Но меня это, конечно же, не остановит 🙂. Что может быть прекрасней собственного велосипеда!

Есть еще надежда, что написанные статьи привлекут внимание тех, кто реализует подобное не как я - ради развлечения, а ради работы. Может они в комментариях поделятся своими замерами производительности, или какими-то подводными камнями. Было бы интересно.

Показать

Event Sourcing и Saga с помощью Marten и Wolverine на C# и немного модульного монолита

Уровень сложностиСложный
Время на прочтение16 мин
Просмотры7.1K

В этой статье мы откажемся от контроллеров, MediatR-а и MassTransit-а, всё вышеперечисленное нам заменит Wolverine. Отольём в граните модульный монолит, имплементируем регистрацию событий, используя Marten. Пример всего этого безобразия находится тут.

На фото: Marten (Куница) слева, Wolverine (Росомаха) справа. Хью Джекман просился на обложку, но не прошёл кастинг.

Читать далее

Вклад авторов