Статьи с тегом «Проектирование»
Статьи с тегом «Проектирование» (18 шт.), от новых к старым.
-
Введение в ADR (Architecture Decision Record) — минимальный способ сохранить «почему мы спроектировали именно так» в небольшой команде
Код никогда не объясняет, почему он написан именно так. Разбираем, как использовать ADR (Architecture Decision Record) — одно решение, один Markdown-файл — ч...
-
Чтобы не забыть решить, «за сколько секунд это должно работать» — упорядочиваем нефункциональные требования с помощью «Градации нефункциональных требований» IPA
Причина многих споров вроде «слишком медленно» или «мы не ожидали такого поведения при сбое» — забытые нефункциональные требования. Разбираем простым языком ...
-
Когда не стоит переводить Windows-приложение в веб: таблица решений и «разделение» как реальный выход
Запросов на перевод корпоративных Windows-приложений в веб становится всё больше, но для приложений с интеграцией оборудования, локальной обработкой файлов, ...
-
Как выбрать межпроцессное взаимодействие в Windows — таблица решений: именованные каналы / TCP / gRPC / разделяемая память / COM
Разбираем, как выбрать способ взаимодействия Windows-приложений друг с другом: сильные стороны и ловушки именованных каналов, локального TCP, gRPC, разделяем...
-
Как выбрать место хранения данных Windows-приложения — таблица решений для SQLite / JSON / реестра / Access
Где и в каком формате хранить данные Windows-приложения. Разбираем выбор между AppData и ProgramData, а также сильные стороны и подводные камни SQLite, JSON-...
-
Где размещать catch и логирование при обработке исключений
Чтобы избежать широких catch в глубоких helper-ах, дублирующихся логов на каждом слое и результатов, скрывающих истинную причину, разбираем границы перехвата...
-
Почему в Windows стоит предпочитать ожидание события, а не Sleep(1)
В Windows точность коротких timed wait зависит от гранулярности системных часов и планирования. Если вы ждёте появления работы, завершения ввода-вывода или з...
-
Таблица решений: завершать работу приложения или продолжать при неожиданном исключении
Разбираем, когда после неожиданного исключения приложение стоит завершать, а когда можно продолжать работу — с точки зрения повреждения состояния, внешних по...
-
Минимальный чек-лист безопасности при разработке Windows-приложений
Систематизируем в виде чек-листа базовые меры безопасности для бизнес-приложений на WPF / WinForms / WinUI / C++ / C#: права доступа, подпись кода, обновлени...
-
Что такое .NET Generic Host — основа для DI, конфигурации и логирования
Разбираем роль Generic Host через связь DI, конфигурации, логирования, IHostedService и BackgroundService — и с практической точки зрения показываем, где он ...
-
Что такое .NET Native AOT — чем он отличается от JIT и trimming
Разбираемся, что такое Native AOT, через различия с JIT, ReadyToRun, self-contained, single-file, trimming и source generator, и с практической точки зрения ...
-
Как выбирать между тремя таймерами .NET - PeriodicTimer/Timer/DispatcherTimer
Разбираем различия между PeriodicTimer, System.Threading.Timer и DispatcherTimer и то, как выбирать между ними для async-обработки, callback'ов ThreadPool и ...
-
Зачем использовать .NET Generic Host и BackgroundService в десктопных приложениях
Разбираем, как использовать Generic Host и BackgroundService, чтобы упорядочить запуск, периодическую обработку, завершение работы, логирование, конфигурацию...
-
Практическое руководство по FileSystemWatcher — защита от потерянных и повторяющихся уведомлений
Разбираем использование FileSystemWatcher и его подводные камни — потерянные уведомления, дублирующиеся события, ловушки определения завершения, повторное ск...
-
Практическая таблица решений для C# async/await — Task.Run и ConfigureAwait
Разбираем лучшие практики C# async/await — ожидание I/O, вычисления CPU, Task.Run, ConfigureAwait(false) и fire-and-forget — вместе с таблицей решений.
-
Практическое руководство по максимальному приближению к мягкому реальному времени на обычной Windows
Разбираем подход к стабилизации периодической обработки и обработки с низкой задержкой на обычной Windows — с точки зрения точности таймеров, приоритетов, на...
-
Основы взаимного исключения при файловой интеграции — лучшие практики файловых блокировок и атомарного claim
Разбираем взаимное исключение при файловой интеграции с точки зрения файловых блокировок, атомарного claim, схемы temp -> rename и идемпотентности, и рассмат...
-
Введение в HCP-диаграммы и MakingHCPChartSkill
Объясняем, что такое HCP-диаграммы, и разбираем, как MakingHCPChartSkill преобразует HCP-DSL в детерминированный SVG, как читать результат и как им пользоват...