Middle+
VIP dövrü ilə memarlıq haqqında bilirsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
VIP (Baxış, Interaktor, Təqdimatçı) - bu, Təmiz Arxitekturanın bir variantını təmsil edən arxitektura şablonudur və iOS inkişafında məsuliyyətlərin bölünməsi və kodun test edilə bilməsini yaxşılaşdırmaq üçün istifadə olunur. Əsasən, komponentlər arasında tək istiqamətli məlumat axını mövcuddur.
VIP komponentləri:
- Baxış: Məlumatları göstərir və istifadəçi hərəkətlərini (user actions) Interaktora göndərir. Baxış (UIView, UIViewController və ya sadəcə protokol) biznes məntiqini ehtiva etmir.
- Interaktor: Biznes məntiqini ehtiva edir. Baxışdan hərəkətləri alır, lazım olan əməliyyatları (məsələn, məlumatlara çıxış, hesablamalar) yerinə yetirir və nəticəni Təqdimatçıya göndərir. UI-dən asılı deyil.
- Təqdimatçı: Interaktordan məlumatları alır, onları göstərmək üçün formatlayır və Baxışa göndərir. Biznes məntiqini ehtiva etmir, yalnız məlumatların təqdimatı ilə məşğuldur.
Əlaqə dövrü:
- İstifadəçi Baxışda hərəkət edir.
- Baxış "sorğu" (request - struct/enum) göndərir və Interaktora çatdırır.
- Interaktor sorğunu emal edir, biznes məntiqini yerinə yetirir və "cavab" (response - struct/enum) ilə Təqdimatçıya göndərir.
- Təqdimatçı cavabı alır, məlumatları "ViewModel" (struct/enum) formatlayır və Baxışa göndərir.
- Baxış ViewModel-i alır və UI-ni yeniləyir.
Əlavə komponentlər (istəyə bağlı):
- Router: VIP modulları (səhnələri) arasında naviqasiyanı idarə edir. Adətən, Interaktor və ya Təqdimatçı tərəfindən çağırılır.
- Worker: Interaktorun komponenti olub, müəyyən tapşırıqları yerinə yetirmək üçün məsuliyyət daşıyır (məsələn, şəbəkə sorğuları, Core Data ilə işləmək).
VIP-nin əsas üstünlükləri:
- Məsuliyyətlərin bölünməsi: UI, biznes məntiq və təqdimat məntiqi arasında aydın bölünmə.
- Test edilə bilmə: Hər bir komponenti ayrıca test etmək asandır, asılılıqları mock etmək vasitəsilə.
- Dəstək: Bir komponentdə edilən dəyişikliklər digər komponentlərə az təsir edir.
VIP modulu üçün qovluq strukturu nümunəsi (UserScene):
UserScene/
├── UserViewController.swift
├── UserInteractor.swift
├── UserPresenter.swift
├── UserRouter.swift
├── UserModels.swift // Sorğu, Cavab, ViewModel üçün strukturlar
├── UserProtocols.swift // Komponentlər arasında kommunikasiya üçün protokollar
İstifadəçi məlumatlarının yüklənməsi nümunəsi:
// UserViewController-də
func viewDidLoad() {
super.viewDidLoad()
interactor?.fetchUserData(request: UserModels.FetchUser.Request())
}
// UserInteractor-də
func fetchUserData(request: UserModels.FetchUser.Request) {
// ... biznes məntiqi ilə məlumatların yüklənməsi ...
let response = UserModels.FetchUser.Response(userData: fetchedData)
presenter?.presentUserData(response: response)
}
// UserPresenter-də
func presentUserData(response: UserModels.FetchUser.Response) {
let viewModel = UserModels.FetchUser.ViewModel(
displayName: response.userData.name,
displayEmail: response.userData.email
)
viewController?.displayUserData(viewModel: viewModel)
}
// UserViewController-də (UserDisplayLogic protokolunun tətbiqi)
func displayUserData(viewModel: UserModels.FetchUser.ViewModel) {
nameLabel.text = viewModel.displayName
emailLabel.text = viewModel.displayEmail
}