CodeShot

MVVM در مقابل Code-Behind

در الگوی MVVM، منطق نمایش و state در کلاس‌های ViewModel جدا از UI نگه‌داری می‌شود و از طریق Data Binding به XAML متصل می‌شود؛ در رویکرد Code-Behind، منطق مستقیماً در فایل .xaml.cs پشت صفحه نوشته می‌شود و مستقیماً به عناصر UI دسترسی دارد.

ویژگیMVVMCode-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 را فقط برای موارد ساده و مقطعی نگه دارید.