Furkan KapukayaYazılım geliştirme
C# ve .NET2 dk okuma

WPF ve MVVM Nedir? Masaüstü Uygulamalarda Düzenli Mimari

WPF'de MVVM deseninin Model, View ve ViewModel katmanları, veri bağlama, komutlar, CommunityToolkit.Mvvm ile kod azaltma ve test edilebilir masaüstü uygulama geliştirme.

WPF ile geliştirilen masaüstü uygulamalarda tüm kodu pencerelerin arkasına (code-behind) yazmak başlangıçta hızlı görünür; ama ekran ve iş kuralı sayısı arttıkça kod hızla karmaşıklaşır. MVVM (Model-View-ViewModel) deseni, bu karmaşıklığı düzenli katmanlara ayırır.

Katmanlar

  • Model: Veriler ve iş kuralları. Ürün, sipariş, stok hesabı.
  • View: XAML ile tanımlanan arayüz. Mümkün olduğunca az kod içerir.
  • ViewModel: View'un ihtiyaç duyduğu verileri ve komutları sunan ara katman. View'u tanımaz.

Veri bağlama

WPF'nin güçlü veri bağlama (data binding) özelliği sayesinde View, ViewModel'deki özelliklere bağlanır. Özellik değiştiğinde arayüz kendiliğinden güncellenir.

<TextBox Text="{Binding MusteriAdi, UpdateSourceTrigger=PropertyChanged}" />
<Button Content="Kaydet" Command="{Binding KaydetCommand}" />

CommunityToolkit.Mvvm ile daha az kod

INotifyPropertyChanged ve komutları elle yazmak tekrarlı bir iştir. Açık kaynaklı CommunityToolkit.Mvvm kütüphanesi kaynak üreticilerle bu kodu otomatik oluşturur:

public partial class MusteriViewModel : ObservableObject
{
    [ObservableProperty]
    private string musteriAdi = "";

    [RelayCommand]
    private async Task KaydetAsync() { /* kaydet */ }
}

MVVM'in faydaları

  1. Test edilebilirlik: ViewModel'ler arayüz olmadan test edilebilir. Bkz. birim testi.
  2. Bakım kolaylığı: Arayüz değişikliği iş kurallarını etkilemez.
  3. Ekip çalışması: Tasarım ve mantık ayrı ilerleyebilir.
  4. Yeniden kullanım: Aynı ViewModel farklı görünümlerde kullanılabilir.

Dikkat edilecekler

  • Küçük bir yardımcı araç için tam MVVM gereksiz olabilir.
  • ViewModel'in içinde MessageBox göstermek gibi arayüz kodları yer almamalı; bunun için servis soyutlamaları kullanılmalı.
  • Uzun süren işlemler async yazılmalı; arayüz donmamalı. Bkz. async/await.

WinForms'tan geçiş

WinForms uygulamalarını WPF'e taşırken MVVM'e geçiş, iş kurallarını formlardan ayırmak için iyi bir fırsattır. Teknoloji seçimi için WinForms, WPF ve MAUI karşılaştırması yazımıza bakabilirsiniz.

Sık sorulan sorular

MVVM yalnızca WPF için mi?

Hayır. MAUI, Avalonia ve WinUI gibi XAML tabanlı teknolojilerde de yaygın olarak kullanılır. Bkz. Avalonia ile çapraz platform masaüstü.

DI ile birlikte kullanılabilir mi?

Evet. ViewModel'ler ve servisler Generic Host üzerinden DI ile yönetilebilir. Bkz. dependency injection.

Sonuç

MVVM, büyüyen masaüstü uygulamalarını düzenli ve sürdürülebilir tutar. WPF projeleriniz için destek alabilirsiniz.