Դու գիտե՞ք Facade նախագծման ձևանմուշը: Խոսեք դրա օգտագործման փորձի մասին։
sobes.tech AI
Պատասխան AI-ից
Այո, ես ծանոթ եմ Facade նախագծման օրինակին: Դա կառուցվածքային օրինակ է, որը ապահովում է միացյալ ինտերֆեյս բարդ ենթամշակույթի դասերի համար: Նրա նպատակն է պարզեցնել ենթամշակույթի օգտագործումը, թաքցնելով նրա բարդությունը հաճախորդից:
Ես ունեցել եմ փորձ Facade օրինակով, օրինակ՝ բազմաշերտ ծրագրային ճարտարապետության դեպքում: Նկատենք, որ եղել է մոդուլ ցանցի և տվյալների բազայի հետ աշխատելու համար: Փոխարենը, որ հաճախորդի կոդը ուղղակիորեն շփվի ցանցային շերտի դասների (Retrofit, OkHttp), պարսկերների, տվյալների բազայի դասերի (Room, DAO) հետ, ստեղծվել է ֆասադ դաս: Այս ֆասադը տրամադրում է պարզ մեթոդներ, օրինակ՝ getUser(userId) կամ saveUser(user), որոնք ներսում համակարգում են համապատասխան ենթամշակույթների հետ շփումը՝ կատարելով ցանցային հարցում, տվյալների պարսկերում, պահպանում տվյալների բազայում:
Այս մոտեցման առավելությունները՝
- Հեշտացնել հաճախորդի կոդը: Հաճախորդը չպետք է իմանա ենթամշակույթի ներքին կառուցվածքը:
- Համակցվածության նվազեցում: Ֆասադը բաժանում է հաճախորդին ենթամշակույթի կոնկրետ իրականացումներից, ինչը հեշտացնում է փոխարինումը:
- Կառուցվածության բարելավում: Սուբսիստեմը ավելի կառավարելի և հասկանալի է դառնում:
Նմուշ՝ ֆասադի պարզեցված իրականացման:
// API-ի հետ աշխատող ենթամշակույթ
class ApiService {
fun getUserFromApi(userId: Int): String {
// Ցանցային հարցման տրամաբանություն
return "{\"id\":$userId, \"name\":\"John Doe\"}"
}
}
// Տվյալների բազայի հետ աշխատող ենթամշակույթ
class DatabaseService {
fun saveUserToDb(userJson: String) {
// Տվյալների պահպանում
}
fun getUserFromDb(userId: Int): String {
// Տվյալների ստացում
return "" // Զանգված
}
}
// Ֆասադ
class UserFacade(
private val apiService: ApiService,
private val databaseService: DatabaseService
) {
fun getUser(userId: Int): String {
// Նախ փորձում ենք ստանալ տվյալները տվյալների բազայից
val userFromDb = databaseService.getUserFromDb(userId)
if (userFromDb.isNotEmpty()) {
return userFromDb
}
// Եթե չկա տվյալների բազայում, ստանում ենք API-ից
val userFromApi = apiService.getUserFromApi(userId)
// Սխեման պահպանում ենք տվյալների բազայում
databaseService.saveUserToDb(userFromApi)
return userFromApi
}
}
// Օրինակ՝ ֆասադի օգտագործում հաճախորդային կոդում
fun main() {
val apiService = ApiService()
val databaseService = DatabaseService()
val userFacade = UserFacade(apiService, databaseService)
val userJson = userFacade.getUser(123)
println(userJson)
}
Այս օրինակով UserFacade թաքցնում է օգտվողի տվյալների ստացման և պահպանում գործընթացները, տրամադրելով հաճախորդին պարզ getUser մեթոդը: Հաճախորդը չպետք է իմանա ApiService և DatabaseService մասին:
Այսպիսով, Facade-ն օգնում է ստեղծել ավելի մաքուր, հասկանալի և հեշտ պահպանվող կոդ, հատկապես աշխատելով բարդ մոդուլների հետ։