Kafayı yiyecektim arkadaş. WPF'e başladığım ilk zamanlar, her şeyi MainWindow.xaml.cs'in içine yazıyordum. Buton click? Code-behind. Combobox seçimi? Code-behind. Veri yükleme? Yine code-behind. "Zaten çalışıyor, pattern falan ne gerek var ki?" diyordum. Meğerse kocaman bir spaghetti code dağının temelini atıyormuşum.
Code-Behind Cehennemim
Proje büyüdükçe, o MainWindow.xaml.cs dosyası 1000 satırı geçti. Bir butona tıklayınca ne olacağını bulmak için sayfalarca aşağı kaymak gerekiyordu. Unit test yazmak? Şaka gibi ama imkansızdı çünkü her şey arayüze sıkı sıkıya bağlıydı. ViewModel diye bir şey duymuştum ama "Nasıl yani, INotifyPropertyChanged ne işe yarıyor?" diye düşünüp geçiyordum.
MVVM Aydınlanması ve İlk ViewModel
Sonra bir gün, gerçek bir MVVM örneği inceledim. DataBinding'in gücünü, Command'ların şıklığını gördüm. İlk ViewModel sınıfımı yazdığımda, olay şuna döndü:
INotifyPropertyChanged interface'ini implemente edip, ICommand ile bir komut yazdığım an, dünyam değişti. Artık UI (View) ile iş mantığım (ViewModel) birbirinden ayrılmıştı. XAML tarafı temiz, arka plan kodu sade ve test edilebilir hale gelmişti.
Ulaştığım Rahatlık ve Pişmanlık
Şimdi geriye dönüp baktığımda, o code-behind'a döktüğüm yüzlerce satır kod için yüzüm kızarıyor. MVVM sadece bir "pattern" değil, WPF'de sağlıklı kod yazmanın olmazsa olmazıymış. Veri bağlama (Binding) sayesinde UI güncellemeleri otomatik, ViewModel'ler sayesinde kod tekrar kullanılabilir ve test edilebilir hale geldi.
Siz de benim gibi WPF'de code-behind cennetinden MVVM disiplinine geçiş yaptınız mı? O eski alışkanlıkları kırmak sizi de zorladı mı? Yoksa siz baştan mı akıllıydınız? Yorumlara bekliyorum!
Proje büyüdükçe, o MainWindow.xaml.cs dosyası 1000 satırı geçti. Bir butona tıklayınca ne olacağını bulmak için sayfalarca aşağı kaymak gerekiyordu. Unit test yazmak? Şaka gibi ama imkansızdı çünkü her şey arayüze sıkı sıkıya bağlıydı. ViewModel diye bir şey duymuştum ama "Nasıl yani, INotifyPropertyChanged ne işe yarıyor?" diye düşünüp geçiyordum.
C#:
// Utanç dolu eski kodum
private void Button_Click(object sender, RoutedEventArgs e)
{
string ad = txtAd.Text;
listBox.Items.Add(ad);
// İş mantığı, UI işlemleri, her şey iç içe...
}
Sonra bir gün, gerçek bir MVVM örneği inceledim. DataBinding'in gücünü, Command'ların şıklığını gördüm. İlk ViewModel sınıfımı yazdığımda, olay şuna döndü:
C#:
public string KullaniciAdi { get; set; } // Değil!
public string KullaniciAdi
{
get { return _kullaniciAdi; }
set { _kullaniciAdi = value; OnPropertyChanged(); }
}
INotifyPropertyChanged interface'ini implemente edip, ICommand ile bir komut yazdığım an, dünyam değişti. Artık UI (View) ile iş mantığım (ViewModel) birbirinden ayrılmıştı. XAML tarafı temiz, arka plan kodu sade ve test edilebilir hale gelmişti.
Şimdi geriye dönüp baktığımda, o code-behind'a döktüğüm yüzlerce satır kod için yüzüm kızarıyor. MVVM sadece bir "pattern" değil, WPF'de sağlıklı kod yazmanın olmazsa olmazıymış. Veri bağlama (Binding) sayesinde UI güncellemeleri otomatik, ViewModel'ler sayesinde kod tekrar kullanılabilir ve test edilebilir hale geldi.
Siz de benim gibi WPF'de code-behind cennetinden MVVM disiplinine geçiş yaptınız mı? O eski alışkanlıkları kırmak sizi de zorladı mı? Yoksa siz baştan mı akıllıydınız? Yorumlara bekliyorum!