Təmiz memarlıq haqqında nə deyə bilərsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Təmiz Arxitektura (Clean Architecture), Robert Martin ("Uncle Bob") tərəfindən populyarlaşdırılmışdır və kodun təşkilatı üçün prinsiplər to'plamidir, bu prinsiplər elastik, test qilinadigan va oson qo'llab-quvvatlanadigan tizim yaratishga qaratilgan.
Asosiy g'oyalar:
- Qavatlarga bo'linish: Kod doira shaklida bo'linadi, ichki doiralar biznes mantiqini, tashqi doiralar esa amalga oshirish tafsilotlarini o'z ichiga oladi (UI, ma'lumotlar bazalari, tashqi API lar).
- Ichki qatlamlarga bog'liqlik: Tashqi qatlamlar ichki qatlamlarga bog'liq, ammo aksincha emas. Bu bog'liqliklarni teskari bog'liqlik prinsipi bilan erishiladi.
- Inkapsulyatsiya: Har bir qatlam o'z amalga oshirish tafsilotlarini tashqi qatlamlardan yashiradi.
- Test qilish imkoniyati: Markaziy qatlamda joylashgan biznes mantiq tashqi tafsilotlardan mustaqil bo'lib, uni ajralib test qilish oson.
- Frameworklardan mustaqillik: Asosiy biznes qoidalari aniq framework, UI yoki ma'lumotlar bazalariga bog'liq emas.
Qavatlar (misol):
- Entities: Biznes ob'ektlar va qoidalarni o'z ichiga oladi (masalan,
Userklassi va foydalanuvchi bilan bog'liq biznes mantiq). - Use Cases (Interactors): Biznes mantiqni maxsus ilova uchun saqlaydi (masalan,
GetUserUseCase). U Entities va Gateway Interfaces o'rtasidagi o'zaro ta'sirni boshqaradi. - Interface Adapters: Tashqi manbalardan olingan ma'lumotlarni Use Cases va Entities uchun tushunarli formatga moslashtiradi (masalan, UI uchun Presenters, ma'lumotlar bazalari uchun Gateway Implementations).
- Frameworks & Drivers: Tashqi qatlam, frameworklar (UI, ma'lumotlar bazalari, veb-xizmatlar) ni o'z ichiga oladi.
Bog'liqliklarni teskari qilish prinsipi muhim rol o'ynaydi. Ichki qatlamlar interfeyslarni (Gateway Interfaces) belgilaydi, tashqi qatlamlar esa bu interfeyslarni amalga oshiradi. Quyidagi sxemada ko'rsatilgan:
+-----------------+ +-------------------+ +--------------------+ +------------------------+
| Frameworks & |----->| Interface |<-----| Use Cases |<-----| Entities |
| Drivers (UI, DB)| | Adapters | | (Interactors) | | (Business Rules) |
+-----------------+ | (Presenters, | | | +------------------------+
| Gateway Impls) | | |
+-------------------+ +--------------------+
Tugmalar bog'liqlik yo'nalishini ko'rsatadi. Barcha bog'liqliklar ichki tomonga, Entities qatlamiga yo'naltirilgan.
Android ishlab chiqishda Toza Arxitektura ko'pincha quyidagi komponentlar bilan amalga oshiriladi:
- UI Layer (Prezentatsiya): Activity, Fragment, ViewModel, UI Logika. Dependent on Domain Layer.
- Domain Layer (Use Cases): Ilova biznes mantiqi. Boshqa qatlamlardan mustaqil.
- Data Layer: Ma'lumot manbalari (tarmoqlar, ma'lumotlar bazalari), repository lar. Domain Layer da belgilangan interfeyslarni amalga oshiradi.
Misol uchun struktura:
root
├── app
│ ├── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── example
│ │ └── myapp
│ │ ├── prezentatsiya // UI Layer (ViewModel, Activities, Fragments)
│ │ │ ├── ui
│ │ │ └── viewmodel
│ │ ├── domen
│ │ │ ├── entitiy
│ │ │ ├── repository // Domain Interfaces
│ │ │ └── usecase
│ │ └── data // Data Layer (Repositories, Data Sources, Mappers)
│ │ ├── local // Local Data Source (Room)
│ │ ├── remote // Remote Data Source (Retrofit)
│ │ ├── mapper
│ │ └── repository // Data Implementations extending Domain Interfaces
│ └── build.gradle
└── build.gradle
Afzalliklari:
- Test qilish imkoniyati: Biznes mantiq izolyatsiya qilingan va oson test qilinadi.
- Moslashuvchanlik: Tashqi bog'liqliklarni oson o'zgartirish mumkin (masalan, Room dan Realm ga o'tish).
- Qo'llab-quvvatlash: Aniq mas'uliyat bo'linishi kodni tushunish va qo'llab-quvvatlashni osonlashtiradi.
- Texnologiyadan mustaqillik: Biznes mantiqi Android framework yoki kutubxonalar bilan bog'liq emas.
Kamchiliklari:
- Murakkablik: Dastlabki tushunish va amalga oshirish uchun qiyin bo'lishi mumkin, ayniqsa kichik loyihalar uchun.
- Ko'proq kod: Ko'proq sinflar va interfeyslar yozishni talab qiladi, oddiyroq arxitekturalarga qaraganda.
Umuman olganda, Təmiz Arxitektura — bu o'rtacha va katta murakkablikdagi Android ilovalarini yaratishda kuchli yondashuv bo'lib, biznes mantiqiga asoslangan va texnik tafsilotlardan ko'ra muhimroq bo'lgan loyihalar uchun mos keladi.