Módulo 6 · Aplicações Desktop — Capítulo 01

Panorama: WPF, WinForms e .NET MAUI

O quarto e último modelo de aplicação C#: interfaces com janelas, cliques e formulários próprios, sem depender de navegador. Três tecnologias, um mesmo objetivo.

1. Por que Desktop ainda importa

Mesmo num mundo dominado por web e mobile, aplicações desktop continuam sendo a escolha certa para uma classe específica de problema: ferramentas internas de empresa (ERPs, sistemas de caixa, painéis de operação), software que precisa de acesso profundo ao sistema operacional (hardware, arquivos locais), ou cenários sem internet confiável. É um cenário comum em ambientes corporativos com SQL Server local — exatamente o público deste curso.

2. As três tecnologias .NET para Desktop

WinFormsWPF.NET MAUI
Desde2002 (o mais antigo)20062022 (sucessor do Xamarin.Forms)
PlataformasSó WindowsSó WindowsWindows, macOS, iOS, Android
Como se descreve a UICódigo C# ou designer visual (arrasta-e-solta)XAML (marcação declarativa) + C#XAML + C#, compartilhado entre plataformas
Data bindingLimitadoRobusto — a base do MVVM (próximo capítulo)Robusto, herdado do WPF
Melhor paraFerramentas internas simples, manutenção de sistemas legadosAplicações Windows ricas e modernasUm único código-base rodando em múltiplas plataformas
Qual escolher

Para sistemas novos de uso corporativo interno rodando só em Windows — o cenário mais comum conectado a SQL Server local — WPF é geralmente a escolha mais equilibrada: maduro, com o melhor suporte a data binding e ao padrão MVVM, e uma comunidade enorme. Este módulo usa WPF como referência principal, com o padrão MVVM valendo integralmente para MAUI também.

3. XAML — a linguagem de marcação do WPF

XAML descreve a interface declarativamente, de forma parecida com HTML — mas gerando controles de janela nativos do Windows, não elementos de página web:

XAML MainWindow.xaml
<Window x:Class="AppClientes.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Clientes" Height="450" Width="700">

    <StackPanel Margin="20">
        <TextBlock Text="Nome:" />
        <TextBox x:Name="TxtNome" />

        <Button Content="Salvar" Click="BotaoSalvar_Click" Margin="0,10,0,0" />
    </StackPanel>
</Window>
C# MainWindow.xaml.cs — code-behind
public partial class MainWindow : Window
{
    public MainWindow() => InitializeComponent();

    private void BotaoSalvar_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show($"Salvando cliente: {TxtNome.Text}");
    }
}
Atenção — este estilo não escala

O exemplo acima (chamado code-behind) mistura lógica de UI direto na classe da janela — funciona para uma tela simples, mas reproduz exatamente o problema que o Módulo 3 (capítulo 1) descreveu para telas web: tudo misturado, difícil de testar, difícil de manter. O próximo capítulo apresenta o padrão MVVM, que resolve isso da mesma forma que MVC resolveu para aplicações web.

4. Onde as procedures do Módulo 2 entram aqui

Assim como MVC (Módulo 3) e APIs (Módulo 4), uma aplicação Desktop bem estruturada mantém acesso a dados isolado numa camada de Repository — a única diferença real é que, em vez de um Controller reagindo a uma requisição HTTP, é um ViewModel reagindo a uma ação do usuário (clique de botão) que aciona o mesmo repositório chamando as mesmas procedures.

5. Onde isso te leva

Com o panorama das tecnologias estabelecido, o próximo capítulo aprofunda o padrão que organiza aplicações WPF/MAUI de verdade: MVVM (Model-View-ViewModel), o "primo" desktop do MVC.

📌 Resumo do capítulo

  • WinForms, WPF e .NET MAUI são as três tecnologias .NET para Desktop — WPF é a referência deste módulo.
  • XAML descreve a interface declarativamente; code-behind (C# direto na classe da janela) funciona, mas não escala para telas complexas.
  • Repositories e procedures do Módulo 2 se conectam a uma app Desktop da mesma forma que se conectam a MVC/API — só muda quem os aciona.

✏️ Praticando

  1. Crie um projeto WPF (dotnet new wpf) com uma janela simples de cadastro de cliente, usando code-behind.
  2. Identifique, no código gerado, o que corresponderia a Model, View e "Controller" numa futura migração para MVVM.