Статьи с тегом «Проектирование»
Статьи с тегом «Проектирование» (23 шт.), от новых к старым.
-
Практики многопоточности на Java: что считать нормой в эпоху виртуальных потоков
В Java потоки не создают вручную: задачи отдают ExecutorService и виртуальным потокам. Разбираем, когда брать synchronized, а когда ReentrantLock, как остана...
-
Многопоточность на C: практические рекомендации — безопасно по правилам Win32 API
На C с Win32 потоки создают через _beginthreadex, внутри процесса берут SRW-блокировку и условные переменные, одиночные переменные обновляют Interlocked, ост...
-
Практические приёмы многопоточности в C++: как RAII и jthread убирают аварии из конструкции
В C++ гонка данных — это неопределённое поведение. Разбираем ловушку деструктора std::thread, остановку через jthread и stop_token, предотвращение взаимных б...
-
Практические рекомендации по многопоточности: .NET — что решить до добавления потоков
Проверенные приёмы проектирования на .NET/C#, чтобы код не «иногда падал или зависал»: не создавать потоки вручную и опираться на Task, сокращать разделяемое...
-
ADR (Architecture Decision Record): как в небольшой команде сохранить, почему выбрали именно эту архитектуру
Код не объясняет, почему его написали именно так. Разбираем ADR (Architecture Decision Record): одно решение — один Markdown-файл. Шаблон, таблица «писать ил...
-
Чтобы не забыть решить, за сколько секунд система должна отвечать — нефункциональные требования по «Градации» IPA
Споры вроде «слишком медленно» или «при сбое всё пошло не так, как ждали», часто начинаются с того, что нефункциональные требования так и не зафиксировали. Р...
-
Когда Windows-приложение лучше не переводить в веб: таблица решений и разделение как рабочий вариант
У Windows-приложений со связью с оборудованием, локальной обработкой файлов и офлайн-режимом перевод в веб может увеличить затраты и ухудшить функции. Ниже —...
-
Как устроена изоляция сеансов Windows — Session 0, RDP и одновременная работа нескольких пользователей
Разбираем понятие «сеанса», которое часто путает разработчиков Windows-приложений. С практической стороны объясняем, почему изоляция Session 0 не даёт службе...
-
Как выбрать межпроцессное взаимодействие в Windows — таблица: именованные каналы, TCP, gRPC, разделяемая память, COM
Как выбрать способ связи между Windows-приложениями. В таблице решений разобраны сильные стороны и типичные ошибки именованных каналов, локального TCP, gRPC,...
-
Где хранить данные Windows-приложения: таблица решений SQLite / JSON / реестр / Access
Куда и в каком виде хранить данные настольного Windows-приложения. Разбираем выбор между AppData и ProgramData, сильные стороны и ловушки SQLite, JSON-файлов...
-
Где в обработке исключений ставить catch и логирование
Чтобы не ловить всё подряд в глубоких helper-ах, не плодить одинаковые логи на каждом слое и не прятать причину за возвращаемым результатом, разбираем, где л...
-
Почему в Windows стоит предпочитать ожидание события, а не Sleep(1)
В Windows точность короткого timed wait зависит от гранулярности системных часов и планирования. Если ждать нужно появление работы, завершение ввода-вывода и...
-
Таблица решений: завершать приложение или продолжать после неожиданного исключения
Когда после неожиданного исключения приложение стоит завершать, а когда можно продолжать: порча состояния, внешние побочные эффекты, потоки и граница native-...
-
Минимальный чек-лист безопасности при разработке Windows-приложений
Чек-лист базовых мер безопасности для бизнес-приложений на WPF / WinForms / WinUI / C++ / C#: права, подпись кода, обновления, секреты, HTTPS, проверка ввода...
-
Что такое .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 и обновления UI в WPF.
-
Зачем использовать .NET Generic Host и BackgroundService в десктопных приложениях
Как с помощью Generic Host и BackgroundService собрать запуск, периодическую работу, завершение, логи, конфигурацию и DI в Windows-инструментах и фоновых при...
-
Практическое руководство по FileSystemWatcher — как не терять уведомления и что делать с дублями
Как пользоваться FileSystemWatcher и где он подводит: потерянные уведомления, дубли, ловушки определения готовности, повторное сканирование, атомарный claim ...
-
Практическая таблица решений для C# async/await — Task.Run и ConfigureAwait
Разбираем лучшие практики C# async/await — ожидание I/O, вычисления CPU, Task.Run, ConfigureAwait(false) и fire-and-forget — вместе с таблицей решений.
-
Практическое руководство: soft real-time на обычной Windows
Как стабилизировать периодическую обработку и низкую задержку на обычной Windows: разрешение таймера, приоритеты, питание и способы измерения.
-
Интеграция через файлы: блокировки, атомарный claim и практические рекомендации
Разбираем исключительный доступ при интеграции через файлы — файловые блокировки, атомарный claim, схема temp -> rename и идемпотентность — и собираем приёмы...
-
HCP-диаграмма и MakingHCPChartSkill: с чего начать
Что такое HCP-диаграмма и как MakingHCPChartSkill превращает HCP-DSL в детерминированный SVG: цепочка генерации, как читать рисунок и как этим пользоваться.