Sobes.tech
Middle

Facade dizayn nümunəsi ilə tanışsınızmı? Onu istifadə təcrübəniz haqqında danışın.

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, mən Facade dizayn naxşindən xəbərdaram. Bu, mürəkkəb klasslar alt sisteminə vahid interfeys təmin edən struktur naxışdır. Məqsədi, alt sistemin mürəkkəbliyini gizlətməklə onun istifadəsini sadələşdirməkdir.

Mənim Facade naxşindən istifadə təcrübəm, məsələn, çox qatlı arxitektura ilə işləyərkən olub. Tutaq ki, şəbəkə və verilənlər bazası ilə işləyən modul var idi. Müştəri kodunun birbaşa şəbəkə qatının klassları ilə (Retrofit, OkHttp), parserlər, verilənlər bazası klassları (Room, DAO) ilə qarşılıqlı əlaqədə olması yerinə, bir facade klassı tətbiq olundu. Bu facade sadə metodlar təmin edirdi, məsələn, getUser(userId) və ya saveUser(user), və onlar daxildə müvafiq alt sistemlərlə qarşılıqlı əlaqəni koordinasiya edirdi: şəbəkə sorğusu etmək, məlumatları analiz etmək, onları verilənlər bazasında saxlamaq.

Bu yanaşmanın üstünlükləri:

  • Müştəri kodunun sadələşdirilməsi: Müştəri alt sistemin daxili strukturunu bilməlidir deyildir.
  • Bağlantının azaldılması: Facade, müştərini alt sistemin konkret həyata keçirilmələrindən ayırır, bu da onların dəyişdirilməsini asanlaşdırır.
  • Strukturun yaxşılaşdırılması: Alt sistem daha idarəolunan və anlaşılandır.

Sadələşdirilmiş facade tətbiqi nümunəsi:

// API ilə işləyən alt sistem
class ApiService {
    fun getUserFromApi(userId: Int): String {
        // Şəbəkə sorğusu loqikası
        return "{\"id\":$userId, \"name\":\"John Doe\"}"
    }
}

// Verilənlər bazası ilə işləyən alt sistem
class DatabaseService {
    fun saveUserToDb(userJson: String) {
        // Verilənlər bazasında saxlama loqikası
    }

    fun getUserFromDb(userId: Int): String {
        // Verilənlər bazasından alma loqikası
        return "" // Placeholder
    }
}

// Facade
class UserFacade(
    private val apiService: ApiService,
    private val databaseService: DatabaseService
) {
    fun getUser(userId: Int): String {
        // Əvvəlcə verilənlər bazasından almağa çalışırıq
        val userFromDb = databaseService.getUserFromDb(userId)
        if (userFromDb.isNotEmpty()) {
            return userFromDb
        }

        // Əgər bazada yoxdursa, API-dən alırıq
        val userFromApi = apiService.getUserFromApi(userId)

        // Cache üçün bazaya saxlayırıq
        databaseService.saveUserToDb(userFromApi)

        return userFromApi
    }
}

// Müştəri kodunda facade istifadə nümunəsi
fun main() {
    val apiService = ApiService()
    val databaseService = DatabaseService()
    val userFacade = UserFacade(apiService, databaseService)

    val userJson = userFacade.getUser(123)
    println(userJson)
}

Bu nümunədə, UserFacade API-dən istifadəçi məlumatlarının alınması və verilənlər bazasında saxlanması detalları gizlədir, müştəriyə sadə getUser metodunu təqdim edir. Müştəri ApiService və `DatabaseService``-in mövcudluğunu bilməlidir deyildir.

Bu cür, Facade mürəkkəb modullarla işləyərkən, daha təmiz, anlaşılan və asan dəstəklənən kod yaratmağa kömək edir.