Как стать автором
Поиск
Написать публикацию
Обновить
111.17

C# *

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

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

Type Driven Development на практике

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

Разработка через типы (Type-Driven Development, TypeDD) — это методология программирования, при которой вы начинаете с написания определений типов, которые служат точной спецификацией вашей программы. Вместо того чтобы сначала писать код, а потом добавлять тесты или типы, вы используете компилятор как интерактивного ассистента, который направляет вас к созданию программы, удовлетворяющей заданным типам.

Idris — это чистый функциональный язык программирования, созданный Эдвином Брэди, который идеально подходит для этого подхода благодаря поддержке зависимых типов.


Но попробуем использовать его идеи на практике вне Idris.

Попробуем сравнить такие метрики как
1. Время проектирования (момент, после которого разработчик может больше не соприкасаться с предметной областью, а руководствоваться только ТЗ)
2. Время до выкатки на прод
3. Частота ошибок на проде (и как следствие, ущерб бизнесу и затраты на сопровождение)

Читать далее

Оптимизируйте свой код с Unity Job System

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

В этой статье мы разберем неявное использование многопоточности с Unity Job System: узнаем про преимущества использования такого подхода перед явным созданием потоков, поговорим про неуправляемую память, про преимущества неуправляемой памяти перед управляемой и многое другое...

Читать далее

Фильтрация предупреждений PVS-Studio, выявляющих критические ошибки (согласно классификации ГОСТ Р 71207-2024)

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

ГОСТ Р 71207-2024 "Статический анализ кода" выделят класс дефектов в коде, называемых критическими ошибками. При разработке безопасного программного обеспечения (РБПО) такие дефекты должны в обязательном порядке выявляться и исправляться в приоритетном режиме. Статический анализатор PVS-Studio разрабатывается с учётом этого стандарта и позволяет выявлять все типы критических ошибок в коде программ, написанных на языках C, C++, C#, Java. Рассмотрим эти типы предупреждений и как их можно выделить среди других предупреждений, выдаваемых анализатором.

Читать далее

Garbage Collector в .NET: как работает и зачем нужен?

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

Garbage Collector (GC) — одного из самых важных «невидимых помощников» в.NET.
Он избавляет нас от ручного управления памятью, но как именно?

Читать далее

Используйте Camunda как удобный REST-движок для оркестрации и workflow — без необходимости работать с Java

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

Я много общаюсь о микросервисных архитектурах с «не-Java-людьми» — будь то разработчики на C#, энтузиасты Node.JS/JavaScript или GoLang. Все они сталкиваются с необходимостью оркестрации в микросервисной архитектуре — или просто хотят использовать workflow, упорядочивание действий, обработку таймаутов, Saga и компенсации, а также другие полезные возможности.

Open Source BPM-платформа Camunda отлично подходит для этих задач. Ориентированность на разработчиков — один из ключевых принципов продукта, но при изучении документации может показаться, что она рассчитана в основном на Java-разработчиков. Платформа предоставляет множество точек расширения и интеграции, но всё это реализуется на Java. Значит ли это, что другим разработчикам путь закрыт?

Нет! На самом деле, запустить Camunda и работать с ней без знания Java очень просто — архитектуру можно выстроить так, чтобы писать код на любом удобном языке. В этом посте:

Читать далее

C#, Кодогенерация и DDD Часть 3.1 — Правим подключение пакетов Nuget. Убираем рефлексию. Генерируем конечные точки MVC

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

Это - третья публикация в серии DDD и кодогенерация. (первая часть, вторая часть, третья часть). В этой статье мы сгенерируем код класса для хранения всех данных запроса, код MVC контроллера. И наконец-то уберем рефлексию (но оставим наши типизированные атрибуты).

Читать далее

SharedLogic. Общий игровой код для Unity-клиента и .NET-сервера, который экономит ваши силы

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров2.7K

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

Я использую такую архитектуру в продакшене уже более 10 лет, и она отлично зарекомендовала себя как надёжное и эффективное решение. В этой системе один и тот же код выполняется и на клиенте (для мгновенной обратной связи), и на сервере (для авторитетной проверки).

Как это работает:

• Команды игрока мгновенно выполняются на клиенте.

• Та же команда вместе с хэшем состояния отправляется на сервер и повторно выполняется для верификации.

• Любые попытки изменить код или память клиента будут обнаружены и отклонены сервером.

• Игровая логика вынесена в .dll-плагин, который используется и в Unity-клиенте, и на .NET-бэкенде.

В статье есть полноценный пример на Unity («Connect Four»), открытый исходный код и подробное описание архитектуры.

Читать статью

Автоматизация тестов в .NET: мой опыт со Storm Petrel

Время на прочтение20 мин
Количество просмотров1.3K

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

В этой статье мы рассмотрим Scand Storm Petrel — инструмент для .NET-разработчиков, который автоматизирует однотипную работу по формированию и обновлению ожидаемых значений в тестах. Это особенно актуально при большом количестве тестовых сценариев или сложной структуре тестируемых объектов, что является неотъемлемой частью разработки современных приложений.

Читать далее

Function splitting и чистый код

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

Сложная и тяжелая статья с непропорционально простым выводом. Вспомним фон Неймана, затронем процессорный кеш, поговорим про регистры и компиляторы. Тем, кому не хочется погружаться в детали, достаточно прочитать только Введение и Выводы.

Читать далее

Minimal API: Избавляемся от устаревающих контроллеров в ASP.NET Core

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров7.9K

Я, думаю, многие уже слышали о появившихся в .NET 6 Minimal API - легковесной замене контроллеров/MVC. Кто-то уже успел ознакомиться и задался вопросом: "Ваше API в 3 строчки, это, конечно, здорово, но как это будет работать в реальном проекте с сотнями эндпоинтов, кучей фильтров, аттрибутов, расширениями OpenAPI/Swagger и прочих радостях?"

В этой статье я хочу ответить на этот вопрос: пройдемся от основ, преимуществ, недостатков, и закончим нюансами работы и проблемами, которые обязательно возникнут при миграции с контроллеров на Minimal API в крупном проекте.

А забегая чуть вперед: если думаете, стоит ли переводить проект на Mini API, вот вам сразу полезная информация: они могут жить в проекте вместе, причем даже без дублирования инфраструктуры: не обязательно переводить все разом - подробнее под катом.

Бонусом, заменим SwaggerGen на реализацию OpenAPI от Microsoft.

Читать далее

Vertical Slice Architecture на примере C# — простая и удобная архитектура для небольших (и не только) пректов

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

Простой вопрос: делая задачу, касающуюся API - вы чаще работаете с одним эндпоинтом, или пишете, условные, репозитории, которые используются сразу в нескольких эндпоинтах? Скорее всего, первое, тогда почему мы разбиваем проект по слоям, а не по фичам (эндпоинтам)?

Это видно в часто используемых нынче архитектурных подходах: Layered, Clean Architecture, Onion, и так далее. Не буду выделять что-то конкретное и объясню общую разницу в подходах:
Vertical Slice Architecture (VSA) строится вокруг каждого отдельного feature-слайса (эндпоинта, как самый простой пример), а не вокруг слоев.

То есть, если код относится к конкретному эндпоинту, мы не размазываем его по всему проекту в папках Commands/Services/Repositories/DTOs и т.п., а кладем в одно место, там где и будет находиться эндпоинт

Главный принцип - уменьшаем связанность между слайсами (фичами), увеличиваем связанность внутри слайса

Читать далее

ZLinq — Zero-Allocation LINQ-библиотека для.NET

Уровень сложностиСложный
Время на прочтение20 мин
Количество просмотров5.8K

В прошлом месяце я зарелизил ZLinq v1 — революционную LINQ-библиотеку, которая достигает zero allocation на структурах и дженериках. Она может похвастаться такими расширениями, как LINQ to Span, LINQ to SIMD, LINQ to Tree (FileSystem, JSON, GameObject и т.д.), drop-in replacement Source Generator для произвольных типов, поддержкой нескольких платформ, включая .NET Standard 2.0, Unity и Godot и на данный момент ZLinq имеет более 2000 звезд на GitHub.

Читать далее

Красно-зеленые деревья: обзор

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

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

Читать далее

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

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

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

"В этой статье я расскажу о правильной организации кода автотестов для десктопных приложений. Поделюсь опытом создания архитектуры, которая делает тесты стабильными и поддерживаемыми. Рассмотрим Controller Pattern и его применение в автоматизации десктопных приложений."

Читать далее

T-SQL в .NET Core EF Core: Гибридный подход к производительности и гибкости (Переосмысление с учетом обсуждения)

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

Секретное оружие в .NET Core: Почему вы игнорируете мощь T-SQL?

Ваши LINQ-запросы становятся громоздкими? Производительность упирается в потолок? Возможно, вы упускаете нечто важное.

Эта статья — приглашение взглянуть на привычные инструменты под новым углом. Мы исследуем гибридный подход, который позволяет использовать весь потенциал Microsoft SQL Server, выходя за рамки стандартного взаимодействия через EF Core. Узнайте, как T-SQL может упростить сложные задачи, повысить производительность и сделать вашу архитектуру более гибкой.

Это не просто технический трюк, а переосмысление роли СУБД в современном приложении. Готовы узнать, как использовать "скрытые" возможности MSSQL и почему это может быть именно то, что нужно вашему проекту?

Читать об этом

Руководство для Unity-разработчика: Модульное тестирование

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

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

Многие разработчики программного обеспечения считают модульное (или unit) тестирование важнейшим инструментом для раннего выявления и предотвращения регрессий. Но действительно ли оно эффективно в контексте разработки Unity-проектов?

В этой статье я поделюсь с вами нашим опытом внедрения тестов в Virtual Maker. Мы рассмотрим разницу между модульными, интеграционными и сквозными тестами, а также обсудим, почему вам не следует (по моему мнению) прибегать к последним в ваших проектах.

Читать далее

Пишем парольный менеджер с помощью ChatGPT

Время на прочтение2 мин
Количество просмотров2.3K

Хотел давно написать простенький парольный менеджер на C#, но было очень лень его вспоминать. Самые первые модели ChatGPT выдавали не работающий код, но несколько дней назад ChatGPT выдал практически идеально работающий код, правки были минимальны. Приложу ссылку на GitLab.

Читать далее

Внедрение крупного open-source проекта only office server с портированием на astra linux

Время на прочтение8 мин
Количество просмотров2.3K

Я работаю в одной региональной государственной организации, в которой потребовалось внедрить онлайн систему управления документами, умеющую работать с документами формата docx и xlsx.

Конечно прежде чем что-то внедрять происходит анализ существующих решений и целесообразность их внедрения. Казалось бы тут как нельзя кстати походит Р7 офис корпоративный сервер, так как это решение входит в реестр отечественного ПО и нацелено как раз на этот рынок.

Был сделан запрос цены в АО «Р7», но когда руководство увидело предложение от правообладателя Р7, то сразу отклонило это предложение, ведь оказалось, что цена на 2 порядка выше, чем себе это представлял руководитель. Я могу понять правообладателя, ведь он потратил деньги на сертификацию, программистов и т. д., но нашему руководству этого не понять у них бюджет строго ограничен.

Итак задача изменена на внедрить онлайн систему управления документами но настолько дешево насколько это возможно, а лучше бесплатно но удовлетворяющую требованиям безопасности. Из альтернатив остается только применение open source решения only office server вкупе с выполнением рекомендаций по запуску не доверенного ПО в защищенных средах.

Задача усложняется тем, что базовые сервера работают на ОС AStra linux 1.8. Казалось бы в чем сложность? бери готовые docker образы, разворачивай и будет тебе счастье, но не все так просто – согласно одниму из требований по безопасности docker образ должен быть на базе ОС astra linux.

Итак для безопасности применяем 2 системы: система контейнеризации docker, работающая на основе встроенных в ядро linux механизмов изоляции и МКЦ в ОС astra linux. С docker все стандартно, а вот с запуском docker на пониженном уровне целостности пришлось повозиться. Включаем запуск командой sudo astra-docker-isolation enable, запускаем любой образ и получаем ошибку запуска docker. Путем анализа логов удалось обнаружить, что не удается пробросить порт, так как docker не имеет на это прав. После долгих поисков найдено решение написать политику разрешения доступа к firewalld для процесса docker.

Читать далее

Scalar вместо Swagger UI. Надо ли оно нам?

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров7.2K

С выходом .NET 9 пакет Swashbuckle.AspNetCore выпилили из шаблона Web API. Это означает, что при создании нового приложения ASP.NET Core Web API у нас больше нет привычного зеленого пользовательского интерфейса Swagger для тестирования endpoint-ов. В статье — краткий разбор, почему это произошло, и обзор альтернативы Scalar.

Хочу разобраться

Эволюция программирования: как парадигмы украли нашу свободу

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров9.8K

Представьте: вы — инженер-программист из 60-х. Ваш код — это дикие прерии, где goto прыгает через функции как ковбой через барную стойку, а память — ваше личное ранчо. Вас внезапно переносят в 2023 год. Вас окружают фразы вроде «SOLID», «иммутабельность», «реактивные потоки». Вы пытаетесь написать пару строк на Python, но слышите: «Стоп. Мутировать переменные? В 2023-то? Это же грех!».

Что случилось с нашей свободой?

За последние 70 лет программирование из искусства постепенно превращалось в ремесло со своими жёсткими требованиями и правилами. Мы больше не взламываем реальность — мы строим мосты по ГОСТу.

Читать далее

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