MediatR является, безусловно, очень успешным и популярным open-source проектом, который глубоко проник в недры коммерческой разработки. Однако, сколь популярен инструмент столь много способов его применения рождается среди сообщества. В этой статье я покажу два самых главных способа использовать этот инструмент неправильно вместе со способами решения проблемы
.NET *
Хаб со знаниями про .NET
Новости
Приглашаем на C# Meetup: обсудим дилемму кота Матроскина
Меня зовут Дима Орлов, я руковожу группой разработки «Путь закупки» и пишу на C# больше 10 лет. Приглашаем на митап, посвященный C# — одному из основных языков, используемых в Ozon. У нас сотни микросервисов на C#, обеспечивающих работу сайта, склада, систем логистики и платформы собственных продаж. Работают над этим более 500 С#-разработчиков, готовых погружаться в business-critical проекты.
Поговорим о наших проектах подробнее:
— О наборе микросервисов «Потребность». Каждый день по набору товаров (±300к) он считает, сколько, на какой склад и у кого закупить товары. По технической части сконцентрируемся на Kafka, компонентном подходе, сериализации правил.
— О том, как мы с помощью SourceGenerator избавились от конфликтов версий пакетов при распространении клиентов для веб-сервисов и начали экономить время и силы на написании однотипного кода.
Discriminated Unions в C#
Всем привет. Среди многих интересных концепций, имеющихся в F#, меня привлекли Discriminated Unions. Я задался вопросом, как их реализовать в C#, ведь в нем отсутствует поддержка (синтаксическая) типов объединений, и я решил найти способ их имитации.
Discriminated Unions - тип данных, представляющий собой размеченные объединения, каждый из которых может состоять из собственных типов данных (также именованных).
Идея в том, что мы имеем ограниченное количество вариантов выбора, и каждый вариант может состоять из своего набора данных, никак не связанных с другими, но все варинанты объединены общим подтипом.
Для создания своих Discriminated Unions будем использовать эту мысль
Мне бы только инструменты… Или как мы реализовали сервис обработки логов печати
У нашего заказчика из финансовой сферы были два домена, несколько тысяч терминальных пользователей, пара тысяч принтеров, десять принт-серверов, а также гигабайты логов печати. Именно поэтому неудивительно, что у него появилась необходимость создать сервис, который сможет обрабатывать логи со всех принт-серверов и выгружать информацию в подходящем виде (по определенным требованиям).
Сначала это выглядело как разовая задача: есть excel-файл со списком «табельный номер — имя пользователя», необходимо собрать логи и предоставить суммарную статистику по печати за месяц с разбивкой по городам. Однако, когда приступили к реализации, поняли, что все не так-то просто, как казалось и начали думать над отдельным сервером и сайтом. Взяли .NET 6, Blazor, немного PowerShell, WMI и sqlite. Что же получилось из этого «винегрета»? Читайте ниже.
Таксофон — это единственный выход из «Матрицы»
Вот так началась история «Матрицы». К «Матрице» вернёмся чуть позже, а сейчас про таксофон, когда он появился? Патент на первый телефон-автомат зарегистрирован 13 августа, в 1899 году американцем Уильям Грей.
Доступ к API Binance, KuCoin и Huobi на C#
Получать данные через RestAPI биржи напрямую из клиентского кода удобно, но по любому существуют ситуации, когда все таки лучше или даже, бывает необходимо предварительно обрабатывать данные на своем сервере, сохранять в своей базе данных и уже после этого предоставлять доступ к этим обработанным данным клиентскому приложению через, опять же, свой web сервис, через свой Rest full API.
Рассмотрим одну из таких ситуаций, когда получать данные на клиента напрямую с биржи не удобно, в нашем случае это получение списка торговых пар биржи отсортированных по таким показателям как например, ликвидность и волатильность. Вот в примере ниже, мы из клиентского кода на JavaScript обращаемся за списком продуктов биржи к своему Rest full API Web Service по ссылке
https://cryptoalert.mizerov.com/api/Products/” + ex
где ex – код биржи.
SophiApp, или Как мы делали опенсорс программу для настройки Windows 10 & 11
Я от лица команды хочу показать вам SophiApp — графический наследник Sophia Script for Windows: бесплатная, портативная и полностью опенсорная программа для тонкой настройки Windows 10 и Windows 11.
В этой статье я расскажу, как оброненная мной фраза в комментарии 3 года назад под моей статьей из цикла про тонкую настройку Windows развернула мою жизнь на 180°, а чуть позже — и еще одного человека.
Все это время у меня была идея сделать графическую версию моего модуля на PowerShell, чтобы показать пользователям, каким должен быть современный твикер для Windows, какие функции может в себе нести, а главное — посыл программы: настроить (а не оптимизировать) ОС официальным образом, задокументированным Microsoft, ничего не сломав и не обещая мнимое увеличение производительности, чем грешат аналогичные программы, целенаправленно вводя пользователей в заблуждение.
Мечтают ли разработчики о декларативных тестах
Завершение работы над прошлой публикацией (читать которую для понимания этой совсем не обязательно) принесло мне не мир, но
[TestCase(typeof(Impl), "command")]
public void Test(Type impl, string cmd) =>
((I)Activator.CreateInstance(impl)).Do(cmd);
использовать
[TestCase<Impl>("command")]
public void Test<TImpl>(string cmd) where TImpl : I, new() =>
new TImpl().Do(cmd);
И он оказался ближе, чем я мог подумать. А дальше пошло-поехало…
Программа 3DL — справочник 3D печатника (версия: 1.05)
Программа 3DL - справочник 3D печатника (версия: 1.05) - предназначена для ведения справочника, сравнения и использования параметров печати 3D нитей (филаментов) различных производителей и полезна для людей использующих/тестирующих большое количество филаментов.
Способы сохранения промежуточных состояний системы при автоматизированном тестировании
Ваше ПО проходит путь от MVP до Enterprise платформы? Атомарных тест-кейсов (ТК) оказывается слишком много, их поддержка становится дорогой с точки зрения времени и ресурсов? Возможное решение — объединять несколько близких ТК в один и автоматизировать результат. В свою очередь, автоматизация обобщенного ТК невозможна без сохранения промежуточных состояний.
Под катом рассмотрим способы сохранения промежуточных состояний и проверим каждый из них на соответствие «лучшим практикам» автотестирования.
Любительская почта — чебурнет судного дня
Всем привет!
В данной статье описан мой опыт создания sneakernet-сети, мотивация, побудившая написать данное ПО, общее описание работы, бенчмарки, а также ссылки на сторонние ресурсы, где можно почитать документацию и скачать исходный код и готовую скомпилированную сборку.
Unity: Что представляет из себя Coroutine и зачем там IEnumerator
Название статьи - это вопрос, который мне задали на собеседовании на позицию Middle. В этой статье мы расмотри корутины в Unity, что они из себя представляют, и заодно захватим тему Enumerator\Enumerable в С# и небольшую тайну foreach. Статья должна быть очень полезной для начинающих и интересной для разработчиков с опытом.
PowerShell: HTML Agility Pack и AngleSharp
Как получить и использовать библиотеки «HTML Agility Pack» и «AngleSharp» для создания простого парсера HTML в скрипте для программ-оболочек «Windows PowerShell» версии 5.1 и «PowerShell» версии 7 в операционной системе «Windows 10». Приведен простой пример кода для обеих библиотек.
Xamarin.Forms: Кастомные пины для xamarin.maps
В этой статья мы рассмотри пример реализации кастомных пинов для карты xamarin. Пины будут обладать тем видом, который вам нужен. Так же мы рассмотрим часть кода xamarin.maps, отвечающий за создание, отрисовку и отображение пинов.
Как приготовить Зебру (Мой опыт в ZPL)
Всем привет.
На текущем месте работы, в один момент, мне пришлось экстренно разобраться с печатью этикеток на принтеры Zebra. Так как информации в сети(особенно на русском) оказалось не так много, я как добросовестный программист обратился к документации. В этой статье хотелось бы сделать выжимку, для таких же счастливчиков как я, о том, что такое язык ZPL, как с ним работать и с чем я столкнулся в процессе своих познаний.
Unity: Небольшой скрипт = все ориентации экрана
Хватит блокировать вертикальную или горизонтальную ориентацию экрана в своих проектах на Unity! В этой статье мы рассмотрим небольшой скрипт, который я использовал в своем проекте.
Анализ потока данных PVS-Studio распутывает всё больше связанных переменных
Это вторая статья про связанные переменные и их поддержку в PVS-Studio. В этот раз мы расскажем об улучшении созданного механизма, разберём примеры из реальных проектов и увидим, какие проблемы пользователей анализатора это решает.
.Net Microservices The Hardcore Way: туториал от инженеров Microsoft, получаем PROD опыт
Для тех кто хочет погрузиться в проектирование .Net микросервисов, Kubernetes, Azure и Azure DevOps процессы.
PowerShell: парсер HTML, устаревшие методы
Обзор двух устаревших методов преобразования кода на языке HTML в объект (HTML-парсер) на скриптовом языке PowerShell в операционной системе Windows 10.
Зачем разработчикам Discord.NET нужен статический анализатор?
Discord.NET – библиотека, написанная на C#, которая используется для взаимодействия с Discord API. Сможет ли PVS-Studio помочь её разработчикам? Узнаете в статье!
Вклад авторов
-
sidristij 3013.4 -
XaocCPS 1863.6 -
sahsAGU 1303.2 -
olegchir 1250.6 -
mezastel 1199.6 -
SergeyT 1140.6 -
phillennium 1050.6 -
foto_shooter 1023.0 -
marshinov 888.2 -
chernikov 822.0