Обновить
256K+

C# *

Объектно-ориентированный язык программирования

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

Делегаты и Лямбды: От тайного знания к повседневному инструменту

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели7.8K

В этой статье мы не просто посмотрим синтаксис — мы поймём зачем это нужно и как работает под капотом. Мы пройдём путь от указателей на функции в C/C++ до современных лямбда-выражений в C#, разберёмся с делегатами и научимся использовать всю мощь функциональных возможностей языка.

Читать далее

Внутренняя поверхность полой Земли: проектируем механику ходьбы

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели11K

«Ведь там в монастыре иноки, наверно, полагают, что в аде, например, есть потолок. А я вот готов поверить в ад только чтобы без потолка; выходит оно как будто деликатнее, просвещеннее, по-лютерански то есть. А в сущности ведь не всё ли равно: с потолком или без потолка? »

Ф. М. Достоевский, «Братья Карамазовы»

Читать далее

UseCase или как описывать бизнес-процессы в коде

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели11K

UseCase - как организовать своё приложение с точки зрения бизнес-процессов, чтобы не погрязнуть в хаосе сервисов, контроллеров и разрозненной логики.

Узнать как это

broken lives matter. Как я написал распознавание речи потому что мне не продали ключ

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели4.6K

Статья о том, как я писал свое Распознавание речи, используя vk cloud. Писал от обиды на иностранных разработчиков. Хотя думается мне, что разработчики все-таки наши. Просто для того, чтобы проект стал международным, он должен быть запрещен в России.

Читать далее

DDD ASP.NET Почему не удобно для больших проектов с более чем 30 реестрами

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.4K

Domain-Driven Design (DDD) звучит как серебряная пуля. Когда мы начинаем проект на ASP.NET, идея четкого разделения на слои, изоляция бизнес-логики в домене и использование паттернов вроде Repository и Unit of Work кажется идеальной архитектурой.

Но есть один нюанс: магия DDD начинает испаряться ровно в тот момент, когда количество агрегатов (реестров) в проекте переваливает за 30. То, что было элегантным решением для CRM с 10 сущностями, превращается в бюрократический ад для ERP-системы или крупного маркетплейса.

В этой статье я разберу, почему классический DDD в ASP.NET (особенно в связке с Entity Framework Core) становится узким местом на масштабных проектах.

Читать далее

Неправильное распознавание кодировок библиотекой Ude в C# (кириллица)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.8K

Эта статья про нюансы распознавания кириллицы в коде, и про волшебные файлы, которые не понимают, в какой они кодировке, и ломают работу в коде.

В этой статье разберём, как файл «притворялся» что он Macintoch, хотя был Windows-1251, и какую проверку пришлось из-за этого дописать поверх стандартного Encoding.GetEncoding(cdet.Charset);

Что за битые кодировки?

Паттерн «Идемпотентный потребитель» в .NET и зачем он вам нужен

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели5.5K

В распределённых системах повторная доставка сообщений — не редкая аномалия, а штатный сценарий. В этой статье разберемся, как устроен паттерн «Идемпотентный потребитель» в .NET, где проходят реальные границы его надёжности и почему одних гарантий брокера недостаточно, когда обработчик затрагивает базу данных, кэш и внешние сервисы. Особенно полезно будет тем, кто проектирует событийные системы и хочет заранее убрать класс ошибок, которые обычно всплывают только под нагрузкой или при сбоях.

Читать далее

Поиск в коллекциях или когда O(N) быстрее O(1)

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.2K

На собеседованиях мы слышим или говорим сами, что поиск в массиве медленнее, чем в хеш-таблице. Кто-то даже вспоминает, что поиск в массиве имеет линейную сложность или O(n), а в хеш-таблице — константную O(1). Но работает ли это на практике? Что, если есть ситуации, когда поиск в массиве оказывается быстрее? Давайте не будем торопиться с выводами.

Читать далее

Yet Another генератор статической документации для онтологических моделей данных

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

Привет, хабр! Решил поделиться с миром своим проектом, который делался в свободное время и был мне полезен на моей текущей работе. Ссылка на гитхаб https://github.com/simplepersonru/SimpleOntoDoc

Проект - генератор статического сайта документации для онтологической модели данных
Онтологическая модель данных — это способ формального описания предметной области, в основе которого лежат три главные вещи:

1. Классы (типы объектов, «сущности»).
2. Атрибуты (свойства этих классов).
3. Связи (отношения между классами).

Под катом:

+ Мотивация (зачем мне это нужно)
+ Как это выглядит (с опубликованным примером)
+ Как можно применить (зачем Вам это нужно)

AI дисклеймер - при написании статьи активно использовалась нейросеть головного мозга, будьте осторожны

Читать далее

Распределенная блокировка RedLock.NET. Просто и со вкусом

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели8.5K

В современном мире enterprise-разработки часто встречается необходимость реализации распределённых блокировок. Недавно у меня как раз возникла необходимость реализации распределённой блокировки, и я применил пакет RedLock.NET, о чём и хочу рассказать.

Однако когда я писал статью, как-то «слово за слово», она вылилась в сравнительный анализ RedLock.NET и других решений, которые я тоже рассматривал. Мне кажется, все описанные ниже очевидные и не очень решения будет вспомнить вполне уместно. Надеюсь, получится не так уж длинно и будет полезно для читателей.

Под катом вы не найдете откровений, но найдете размышления (для кого-то, возможно, очевидные) разработчика над задачей, которую все вроде знают, как реализовывать, но когда нужно реализовать, то все опять «подзабыли».

Читать далее

Гайд: Как подключить YandexGPT в свой .NET проект

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.6K

В этом гайде я покажу, как интегрировать возможности YandexGPT (в частности, генерацию текста и картинок) в ваш ASP.NET Core проект.

Читать далее

Нативный код в .NET-библиотеке и как его готовить

Уровень сложностиСредний
Время на прочтение26 мин
Охват и читатели8.4K

Дорогие гости, прошу, присаживайтесь. Сегодня в меню: DllImport по-домашнему, рагу из C# и C++, запечёные в NuGet-пакете x64 и ARM. Также будет предложена закуска в виде истории о безумствах ИИ. Bon appetit!

Читать далее

Pure.DI: новые возможности

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.8K

Pure.DI — это генератор кода для внедрения зависимостей (Dependency Injection), который работает на этапе компиляции. Pure.DI развивает идею «чистого DI»: вместо контейнера и рефлексии вы получаете обычный C#‑код, который создаёт композиции объектов. В этой статье — новые возможности, которые упрощают настройку композиций, делают корни гибче, а диагностику — понятнее.

Читать далее

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

Переиспользуемые валидаторы в FluentValidation: когда надоело копипастить

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели5.8K

В прошлых частях мы научились:
- делать кастомные сообщения (и поняли, что там есть подводные камни)
- использовать Custom и Must для сложной логики

Теперь новый челлендж. Проект растёт, валидаторов становится много. И вы замечаете, что одни и те же правила переезжают из класса в класс. Давайте-ка вынесем их.

Читать далее

.NET под микроскопом | процессы, метаданные, AOT и GC

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели12K

Эта статья скорее всего будет полезна тем, кто продолжает разбираться или работать на платформах .NET . Предупреждаю! Здесь будет далекое плавание в разные места, и с точки ОС будет упомянуто достаточно много!

На просторах Хабра есть несколько хороших статей про устройство и поведение .NET. Мне хотелось бы стать "чем-то по связующим" между ними.

Спустить шлюпку

Elvis-модификатор доступа в C#

Уровень сложностиСредний
Время на прочтение44 мин
Охват и читатели8.6K

Доброго здоровья!

Предполагается, что статья будет интересна тем, кто любит четкие контракты в своих проектах, строгость и чистоту в инкапсуляции, новые подходы в ООП. А также тем, кто уважает функциональное программирование.

Эти темы и затрагиваются в предлагаемом «Elvis-модификаторе доступа», реализованным через Roslyn Analyzer. Все исходники и nuget пакеты прилагаются.

Читать далее

Singleton, Transient, Scoped в .NET: краткая памятка

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.1K

В этой статье я постарался собрать краткий гайд по Singleton, Transient и Scoped. Статья рассчитана на тех, кто хотя бы немного знаком с DI в .NET и не является полноценным туториалом.

Читать далее

Как мы оперативно на PostgreSQL переезжали, или Новые грани применения Dapper

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели9.4K

Всем привет! Я Игорь Эльяс — бэкенд-разработчик, сейчас работаю в МТС Веб Сервисы. Однажды мне досталась задача «перенести приложение в другую БД, за XX времени», где ХХ — короткий интервал с точки зрения потенциального объема работ при подходе «переделываем все по-нормальному — на Entity Framework» :-)

Проект на C#, изначальная БД — MS SQL + мы использовали самодельный ORM. Возможно, вы сейчас подумали — «очередное легаси!». И да и нет. Проект родился еще во времена Framework 2.0, но регулярно обновлялся и сейчас работает на .NET8. Он пережил десятки циклов рефакторинга, поэтому не безнадежен для доработок.

В материале расскажу, что мы в итоге решили со всем этим делать, почему и для чего выбрали именно Dapper, а еще — познакомлю вас с мощным, но малоизвестным инструментом Dynamitey, благодаря которому удалось выполнить все в срок и без лишний приключений.

Читать далее

Создание приложения .NET MAUI с SKSL-шейдерами и аудиообработкой в реальном времени

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.3K

Создание .NET приложения для аудиообработки с привлекательными SKSL-шейдерами

Давайте создадим симпатичное приложение для Android, iOS, MacCatalyst и Windows, которое будет рисоваться на холстике как Flutter, а писать мы будем на C#, как максимум - отвлечемся на синтаксис шейдеров SKSL от Гугла. Забудем, все, что мы слышали про .NET MAUI и начнем творить на Skia холсте…

Читать далее

Как C#‑строки и Dapper тихо убивают индексы Microsoft SQL Server

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели8.2K

Недавно я посвятил время проблеме производительности на продакшене. Приложение работало в горячке — загрузка процессора в среднем превышала 50% и периодически подскакивала до 90%. Мы сделали диагностический снапшот и начали работать с топом запросов по процессорному времени.

Нарушитель номер один? Простой запрос Dapper. Незамысловатое условие WHERE по проиндексированному столбцу. Должно было быть молниеносным, но в среднем потребляло тысячи миллисекунд процессора при сотнях тысяч выполнений в день.

Несоответствие типов на пару символов, совсем невидимое в C#‑коде. Я очень долго глазел на запрос, прежде чем понял происходящее.

Читать далее