Sobes.tech
Middle+

Toza arxitektura haqida nima deyish mumkin?

sobes.tech AI

AIdan javob

Toza Arxitektura (Clean Architecture), Robert Martin ("Uncle Bob") tomonidan ommalashtirilgan, kodni tashkil qilish uchun qoidalar to'plami bo'lib, moslashuvchan, test qilish mumkin va oson qo'llab-quvvatlanadigan tizim yaratishga qaratilgan.

Asosiy g'oyalar:

  1. 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).
  2. Ichki qatlamlarga bog'liqlik: Tashqi qatlamlar ichki qatlamlarga bog'liq, ammo aksincha emas. Bu bog'liqliklarni teskari bog'liqlik prinsipi bilan erishiladi.
  3. Inkapsulyatsiya: Har bir qatlam o'z amalga oshirish tafsilotlarini tashqi qatlamlardan yashiradi.
  4. Test qilish imkoniyati: Markaziy qatlamda joylashgan biznes mantiq tashqi tafsilotlardan mustaqil bo'lib, uni ajralib test qilish oson.
  5. 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, User klassi va foydalanuvchi bilan bog'liq biznes mantiq).
  • Use Cases (Interactors): Ilova uchun maxsus biznes mantiqni o'z ichiga oladi (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 (Presentation): Activity, Fragment, ViewModel, UI Logika. Domain Layer ga bog'liq.
  • 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.

Struktura misoli:

root
├── app
│   ├── src
│   │   └── main
│   │       └── java
│   │           └── com
│   │               └── example
│   │                   └── myapp
│   │                       ├── presentation  // UI Layer (ViewModel, Activities, Fragments)
│   │                       │   ├── ui
│   │                       │   └── viewmodel
│   │                       ├── domain      // Domain Layer (Use Cases, Entities, Interfaces)
│   │                       │   ├── entity
│   │                       │   ├── repository  // Domain Interfaces
│   │                       │   └── usecase
│   │                       └── data        // Data Layer (Repositories, Data Sources, Mappers)
│   │                           ├── local       // Local Data Source (Room)
│   │                           ├── remote      // Remote Data Source (Retrofit)
│   │                           ├── mapper
│   │                           └── repository  // Data Impls 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, Toza 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.