MVVM در مقابل Code-Behind
در الگوی MVVM، منطق نمایش و state در کلاسهای ViewModel جدا از UI نگهداری میشود و از طریق Data Binding به XAML متصل میشود؛ در رویکرد Code-Behind، منطق مستقیماً در فایل .xaml.cs پشت صفحه نوشته میشود و مستقیماً به عناصر UI دسترسی دارد.
| ویژگی | MVVM | Code-Behind |
|---|---|---|
| جداسازی منطق از UI | بالا (تستپذیر) | پایین (وابسته به UI) |
| سرعت پیادهسازی صفحه ساده | کندتر (نیاز به boilerplate) | سریعتر |
| تستپذیری | آسان (ViewModel مستقل از UI) | دشوار (نیاز به UI Test) |
| مقیاسپذیری در پروژه بزرگ | مناسب | نامناسب |
کِی از MVVM استفاده کنیم؟
برای اپلیکیشنهای با منطق تجاری پیچیده، نیاز به تستپذیری بالا یا اشتراک ViewModel بین چند View، از MVVM با Data Binding و کتابخانههایی مثل CommunityToolkit.Mvvm استفاده کنید.
کِی از Code-Behind استفاده کنیم؟
برای صفحات ساده و تعاملات سریع UI (مثل یک انیمیشن جزئی یا صفحه تنظیمات کوچک) که ارزش پیچیدگی اضافه MVVM را ندارند، نوشتن مستقیم منطق در Code-Behind میتواند سریعتر و کافی باشد.
مثال MVVM
public class LoginViewModel : ObservableObject
{
[ObservableProperty] private string username;
[RelayCommand]
private async Task LoginAsync() => await _authService.LoginAsync(Username);
}
// XAML: <Button Command="{Binding LoginCommand}" />
مثال Code-Behind
public partial class LoginPage : ContentPage
{
private async void OnLoginClicked(object sender, EventArgs e)
{
await _authService.LoginAsync(UsernameEntry.Text);
}
}
اشتباه رایج
پیادهسازی MVVM کامل با ViewModel جدا برای یک صفحه بسیار ساده (مثل یک splash screen بدون منطق) که فقط سربار پیچیدگی اضافه میکند بدون فایده واقعی؛ یا برعکس، نوشتن اپلیکیشن بزرگ کاملاً در Code-Behind که تستپذیری و نگهداری آن را بهمرور غیرممکن میکند.
جمعبندی
برای اپلیکیشنهای واقعی و رشدپذیر MAUI، MVVM استاندارد پیشفرض است؛ Code-Behind را فقط برای موارد ساده و مقطعی نگه دارید.
