Ekosystémy pro desktopový vývoj
Vývoj desktopových aplikací stojí na odlišných programech a runtime prostředích. .NET (C#, F# a VB) nabízí bohaté GUI frameworky pro Windows i multiplatformní scénáře. Java poskytuje přenositelnost přes JVM s knihovnami jako JavaFX či Swing. C++ umožňuje plně nativní, vysoce výkonné aplikace s frameworky jako Qt, wxWidgets či JUCE. Výběr platformy zásadně ovlivňuje výkon, uživatelský zážitek, náročnost údržby, bezpečnost, integraci s operačním systémem i náklady na distribuci.
Srovnání platforem: vysokoúrovňový přehled
| Dimenze | .NET | Java | C++ |
|---|---|---|---|
| Runtime | .NET CLR / CoreCLR | JVM / HotSpot / OpenJ9 | Žádný (nativní binárka) |
| GUI frameworky | WPF, WinForms, WinUI 3, MAUI (desktop) | JavaFX, Swing, SWT | Qt, wxWidgets, MFC, JUCE, ImGui |
| Přenositelnost | Windows (nativně), Linux/macOS přes MAUI/GTK#/Avalonia | Vysoká (JVM na cílové platformě) | Vysoká (dle frameworku a nástrojového řetězce) |
| Výkon | JIT/AOT, dostačující pro většinu GUI scénářů, P/Invoke pro nativní kritické cesty | JIT, velmi dobrý, občas vyšší latence při spuštění | Špičkový (nativní), kontrola nad pamětí |
| Distribuce | MSIX/MSI, self-contained publikace | Jlink/jpackage, bundlery pro platformy | NSIS/Wix, platformní balíčky (DEB/RPM, PKG/DMG) |
| Typické scénáře | Line-of-Business na Windows, podnikové aplikace | Kros-platformní nástroje, vzdělávání, podnikové klientské aplikace | CAD/CAE, audio/video, grafika, aplikace náročné na výkon |
.NET: přehled GUI technologií
- WPF (Windows Presentation Foundation): vektorový rendering přes DirectX, data binding, šablony a MVVM. Vhodný pro komplexní podniková uživatelská rozhraní na Windows.
- WinForms: zralý, jednoduchý event-driven model, rychlý vývoj CRUD aplikací. Omezenější možnosti skinování a škálování DPI, ale stále relevantní.
- WinUI 3 / Windows App SDK: moderní Fluent komponenty, kompozice a původ v UWP. Vhodné pro moderní uživatelské zážitky ve Windows.
- .NET MAUI (desktop): multiplatformní (Windows, macOS, Linux částečně přes komunitní vývoj). Jeden kód, různí renderery na cílových platformách.
- Avalonia (komunita): XAML-like, multiplatformní, silná alternativa k MAUI pro desktop-first aplikace.
Java: GUI stack a přenositelnost
- JavaFX: scénografický model (Scene Graph), CSS stylování, FXML, mediální stack, 3D. Vhodný pro modernější uživatelská rozhraní.
- Swing: starší, stále masově využívaný; stabilní API, rozsáhlý ekosystém komponent. Často používaný v korporátní sféře.
- SWT: tenká vrstva nad nativními widgety; vzhledově bližší nativním aplikacím, složitější distribuce.
- Distribuce přes jlink/jpackage: vytvoření minimalizované runtime image spolu s bundlerem pro jednotlivé platformy (EXE, DMG, DEB).
C++: nativní rámce a výkon
- Qt: bohaté widgety, QML (deklarativní UI), mezinárodní prostředí, WebEngine, síť a multimédia, signal/slot model. K dispozici pod komerční i open-source licencí.
- wxWidgets: nativní look & feel díky wrapperům nad nativními toolkity. Méně rozsáhlý ekosystém komponent než Qt.
- MFC/Win32: tradiční, velmi blízko OS API; poskytuje plnou kontrolu, ale vyšší náročnost údržby.
- JUCE: audio DSP, pluginy (VST/AU/AAX), multiplatformní UI – standard v profesionální audio oblasti.
Návrhové vzory UI: MVC, MVP, MVVM, MVI
Na desktopu je populární MVVM (WPF/MAUI/Avalonia) díky data bindingu a commandům. V Javě se používají MVP/MVC vzory (Swing/JavaFX), v C++ (Qt) kombinace signals/slots s model-view (QAbstractItemModel). Klíčem je oddělit prezentační logiku od doménové a spravovat stav tak, aby byl dobře testovatelný.
Vykreslování, DPI a přístupnost
- DPI a škálování: High-DPI je dnes nezbytností (4K/5K displeje). WPF/WinUI/MAUI i JavaFX poskytují podporu škálování; v C++ záleží na použitém frameworku (Qt nabízí kvalitní HiDPI podporu).
- Accessibilita: UIA (Windows), ATK/AX (Linux/macOS). Využijte role, názvy, popisy a klávesovou navigaci. JavaFX/Swing a Qt nabízejí adaptéry k platformám A11y API.
Výkon a práce s vlákny
- UI vlákno: GUI běží jednovláknově (Dispatcher ve WPF, Event Dispatch Thread ve Swing/JavaFX, hlavní vlákno v Qt). Dlouhotrvající operace zpracovávejte ve background vláknech (Task, CompletableFuture, std::async/QThread).
- Asynchronní modely: .NET
async/await, JavaCompletableFuture/ structured concurrency (Project Loom), C++std::futurea Qt signály. - Profilace: sledujte GC pauzy (.NET/Java), alokace a cache missy v C++. Optimalizujte především IO a layout/paint cykly.
Správa paměti a stabilita
- .NET/Java: garbage collector usnadňuje vývoj, ale vyžaduje rozumnou práci s velkými objekty a UI objekty (odstraňování handlerů, Dispose/Close vzory).
- C++: RAII, chytré ukazatele (
unique_ptr,shared_ptr), důsledné vlastnictví. V Qt se používá parent-child vlastnictví QObjectů.
Modularita a pluginy
- .NET: MEF/DI kontejnery, dynamické načítání Assembly, AssemblyLoadContext (.NET 5+).
- Java: JPMS (Java 9+), OSGi, ServiceLoader, vlastní plugin systémy založené na ClassLoaderu.
- C++: dynamické knihovny (DLL/SO/DYLIB), symboly, stabilní ABI; Qt disponuje QPluginLoader.
IPC, automatizace a integrace s OS
- IPC: pojmenované kanály (Pipes), sockety, gRPC, D-Bus (Linux), COM (Windows), sdílená paměť.
- Integrace s OS: asociace souborů, kontextová menu v shellu, registr, služby/daemony, notifikace, panel úloh/badge, klávesové zkratky, systémová lišta.
Úložiště a offline-first přístup
- Databáze: SQLite jako desktopový standard; ORM: EF Core (.NET), JPA/Hibernate (Java), přístup přes Qt SQL v C++.
- Datové formáty: JSON, Protocol Buffers, MessagePack; transakční logy pro robustní obnovu dat.
Testování: jednotkové, integrační a UI testy
- .NET: xUnit/NUnit/MSTest, UI testy (WinAppDriver, Playwright pro WebView2), snapshoty XAML.
- Java: JUnit/Jupiter, TestFX (JavaFX), Jemmy (Swing), Mockito pro izolaci závislostí.
- C++: GoogleTest/Catch2/Doctest, UI testovací nástroje dle frameworku (QtTest).
- Stabilita UI testů: používejte test IDs, explicitní čekání, hermetická data a deterministické layouty.
Build systémy a závislosti
- .NET: MSBuild, SDK-style projekty, NuGet, centralizovaná správa balíčků, self-contained publikace.
- Java: Maven/Gradle, BOM, multi-modulové buildy, reprodukovatelné buildy.
- C++: CMake/Meson, vcpkg/Conan pro správu knihoven, toolchain files pro cross-buildy.
Distribuce a aktualizace
- Windows: MSIX, MSI (WiX), ClickOnce (legacy), Squirrel. Podepisování kódu (Authenticode), reputace SmartScreen.
- macOS: DMG/PKG, notarizace a podpis (Developer ID), sandbox pro Mac App Store.
- Linux: DEB/RPM, AppImage, Flatpak/Snap; požadavky na závislosti a knihovny.
- Automatické aktualizace: kanály (stable/beta), delta balíčky, roll-back; bezpečnost aktualizačních kanálů (TLS, podepsané manifesty).
Bezpečnost a shoda s předpisy
- Sandbox a oprávnění: na Windows běžně plný desktopový přístup; zvažte princip nejmenších práv, proměnné UAC. Na macOS sandbox při distribuci přes Store.
- Úschova tajemství: trezor klíčů (DPAPI, Keychain, libsecret), bez uložení tajemství v binárních souborech.
- Hardening: ASLR/DEP, zpracování vstupů, bezpečné deserializace, podepisování binárek a integrita aktualizací.
UX a nativní chování
- Nativní idiomy: klávesové zkratky, menu bar na macOS, panel úloh na Windows, portálové integrace na Linuxu.
- Responzivní desktop: grid layout, škálování, minimalizace jank při změně velikosti; plynulost je důležitá stejně jako na webu.
Webové vložky a hybridní přístupy
- WebView2 (Edge) v .NET/Win: vykreslení webového UI uvnitř desktopové aplikace; sdílení kódu s webovou aplikací.
- JxBrowser/JCEF pro Javu: integrace Chromium do Java UI.
- C++/Qt WebEngine: embedded Chromium, vhodné pro hybridní obrazovky a dokumentaci.
Modernizace legacy aplikací
- WinForms → WPF/WinUI: postupný přepis kritických obrazovek, hostování WinForms ve WPF (ElementHost) a opačně.
- Swing → JavaFX: JFXPanel jako přechodové řešení, modulární migrace.
- MFC → Qt: paralelní modul, postupná výměna UI vrstev, zachování C++ jádra.
Telemetrie, logování a diagnostika
- Logy: strukturované (Serilog/NLog, SLF4J/Logback, spdlog/g3log). Korelace operací a anonymizace osobních údajů (PII).
- Chybové hlášení: WER (Windows Error Reporting), Sentry/Rollbar/Crashpad. Symboly (PDB/dSYM) pro srozumitelné stacktrace.
- Metoda „perf budget“: definujte cíle pro start aplikace (TTI), reakci na vstup a spotřebu RAM/CPU/GPU.
Licencování a obchodní modely
- Licenční klíče a aktivace: hardwarový otisk, offline licence, odolnost proti manipulaci.
- OEM a Store kanály: Microsoft Store, Mac App Store, vlastní distribuce. Požadavky na sandbox a revize.
Praktické volby podle scénáře
- Backoffice na Windows: .NET WPF/WinUI, rychlý vývoj, snadná integrace s AD/Office, EF Core + SQLite/SQL Server.
- Kros-platformní nástroj: JavaFX (jpackage) nebo Qt (C++). Pokud preferujete C#, zvažte Avalonia/MAUI.
- Výkonově náročné aplikace (CAD/audio/video): C++ + Qt/JUCE, případně hybridní řešení s .NET a nativními knihovnami (C++/CLI, P/Invoke).
Ukázky minimálních programů (zkráceno)
.NET (WPF, C#):
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title="Ahoj" Width="300" Height="200"><StackPanel><Button Content="Klikni" /></StackPanel></Window>
Java (JavaFX):
public class App extends Application { public void start(Stage s){ Button b=new Button("Klik"); s.setScene(new Scene(new StackPane(b),300,200)); s.show(); } }
C++ (Qt Widgets):
int main(int argc,char**argv){ QApplication app(argc,argv); QPushButton b("Klik"); b.show(); return app.exec(); }
CI/CD pro desktop
- Build: Git



























