Xamarin.Forms'da MVVM Mimarisi Nedir?
MVVM (Model-View-ViewModel) Nedir?
MVVM, yazılım geliştirme dünyasında yaygın olarak kullanılan bir tasarım desenidir. Adından da anlaşılacağı gibi, üç temel bileşenden oluşur: Model, View ve ViewModel. MVVM, özellikle kullanıcı arayüzü (UI) ve iş mantığını ayrıştırmak için ideal bir yaklaşımdır. Bu desen, Xamarin.Forms uygulamalarında, uygulamanın kullanıcı arayüzünü ve iş mantığını ayrı tutmak ve daha sürdürülebilir, test edilebilir bir yapı sağlamak amacıyla kullanılır.
MVVM'nin Bileşenleri:
- Model:
Uygulamanın iş mantığı ve verilerinin temsil edildiği bileşendir. Veri sınıfları, iş mantığı ve API çağrıları gibi işlevler burada bulunur. Model, View ve ViewModel'den bağımsızdır ve yalnızca gerekli verileri sağlar.
- View:
Kullanıcıya gösterilen arayüz bileşenlerini temsil eder. XAML
dosyaları ve arayüz tanımları burada yer alır. Görünüm, veri bağlama (data binding) yoluyla ViewModel ile iletişim kurar ve kullanıcı etkileşimlerine yanıt verir.
- ViewModel:
View ile Model arasında bir köprü görevi görür. View tarafından kullanıcıdan gelen verileri alır, Model'den gerekli işlemleri yaptırır ve sonuçları tekrar View'e döner. Komutlar (ICommand
arayüzü) ve veri bağlamaları aracılığıyla kullanıcı etkileşimlerini işler.
MVVM'nin Temel Avantajları:
- Bağımsızlık ve Ayrışma: Kullanıcı arayüzü ve iş mantığı birbirinden ayrıdır, bu sayede her biri bağımsız olarak değiştirilebilir veya test edilebilir.
- Test Edilebilirlik: İş mantığı ViewModel'de olduğundan, birim testler daha kolay uygulanabilir.
- Veri Bağlama (Data Binding): Xamarin.Forms ile View ve ViewModel arasında güçlü bir veri bağlama mekanizması bulunur. Bu sayede, veri değiştiğinde arayüz otomatik olarak güncellenir.
Xamarin.Forms'da MVVM Örneği:
Model:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
ViewModel:
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Input;
using Xamarin.Forms;
public class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection<Person> People { get; set; }
public ICommand AddPersonCommand { get; }
private string newName;
public string NewName
{
get => newName;
set
{
if (newName != value)
{
newName = value;
OnPropertyChanged(nameof(NewName));
}
}
}
public MainViewModel()
{
People = new ObservableCollection<Person>();
AddPersonCommand = new Command(AddPerson);
}
private void AddPerson()
{
if (!string.IsNullOrEmpty(NewName))
{
People.Add(new Person { Name = NewName });
NewName = string.Empty;
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
View (XAML):
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage"
Title="MVVM Example">
<ContentPage.BindingContext>
<local:MainViewModel />
</ContentPage.BindingContext>
<StackLayout Padding="10">
<Entry Placeholder="Enter name" Text="{Binding NewName}" />
<Button Text="Add Person" Command="{Binding AddPersonCommand}" />
<ListView ItemsSource="{Binding People}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
Örnek Açıklaması:
- Model kısmında Person
sınıfı yer alır ve kişi bilgilerini temsil eder.
- ViewModel'de, People
koleksiyonu ve kullanıcı etkileşimlerini işleyen bir ICommand
bulunur.
- View kısmında, Entry
ve Button
kullanılarak ViewModel'e bağlama yapılır ve kullanıcı girişleri ile listeleme işlemleri gerçekleştirilir.
Bu örnekle Xamarin.Forms'da MVVM mimarisinin nasıl işlediğini ve bileşenlerin birbirleriyle nasıl etkileşimde bulunduğunu görebilirsiniz. Bu yapı, projelerinizin sürdürülebilirliğini ve test edilebilirliğini artırır.