تكرار السؤال: …
الإجابة المختصرة
نمط معماري تتدفق فيه الحالة (State) للأسفل نحو الواجهة، وتتدفق الأحداث وتفاعلات المستخدم (Events) للأعلى نحو الـ ViewModel.
الشرح
يضمن UDF وجود مصدر وحيد للحقيقة (Single Source of Truth). لا تقوم واجهة المستخدم بتعديل المتغيرات مباشرة؛ بل تطلق Intent/Event (مثل OnItemClicked). يستقبل الـ ViewModel هذا الحدث، وينفذ منطق العمل المطلوب عبر المستودعات، ثم ينتج حالة جديدة غير قابلة للتغيير (Immutable State) تلتقطها الواجهة وتعيد رسم نفسها.
مثال بالكود
// 1. الحالة تتدفق للأسفل
val uiState: StateFlow<NewsUiState>
// 2. الأحداث تتدفق للأعلى
fun onEvent(event: NewsUiEvent) {
when (event) {
is NewsUiEvent.Refresh -> fetchNews()
is NewsUiEvent.Bookmark -> saveArticle(event.articleId)
}
}أخطاء شائعة
- تعديل الحالة من أماكن متعددة داخل الواجهة بدلاً من جعل الـ ViewModel هو المسؤول الحصري عن إصدار الحالات.