Таза архитектура жөнүндө эмне айта аласыз?
sobes.tech AI
AIден жооп
Таза архитектура (Clean Architecture), Роберт Мартин тарабынан популярдуу кылынган («Дядя Боб») — кодду уюштуруунун принциптеринин топтому, ал ийкемдүү, тестирлөөчү жана оңой тейлөөчү системаны түзүүгө багытталган.
Негизги идеялар:
- Катмарларга бөлүү: Код концентрдик доорлорго бөлүнөт, ички доорлор бизнес логикасын камтыйт, ал эми тышкы — ишке ашыруу деталдары (UI, маалымат базалары, тышкы API).
- Ички катмардын көз карандысы: Тышкы катмары ички катмардын көз карандысы, бирок тескерисинче эмес. Бул көз карандылыктардын инверсиясы принцибин колдонуу аркылуу жетишилет.
- Инкапсуляция: Ар бир катмары өз ишке ашыруу деталдарын тышкы катмарынын көзүнчө калтырат.
- Тестирлөө мүмкүнчүлүгү: Орталык катмарынын бизнес логикасы тышкы деталдарга көз каранды эмес, бул аны изоляцияда оңой тестирлөөгө мүмкүндүк берет.
- Технологиядан көз карандысыздык: Бизнес эрежелери конкреттүү фреймворк, UI же маалымат базаларына байланбаган.
Катмарлар (мисал):
- Entities: бизнес объекттер жана эрежелерди камтыйт (мисалы,
Userклассы менен колдонуучу менен байланышкан бизнес логикасы). - Use Cases (Interactors): колдонмо үчүн өзгөчө бизнес логиканы камтыйт (мисалы,
GetUserUseCase). Алар Entities менен Gateway интерфейстеринин өз ара аракеттенүүсүн уюштурушат. - Interface Adapters: сырттан келген маалыматтарды Use Cases жана Entities үчүн түшүнүктүү форматка ылайыкташтырат (мисалы, UI үчүн Presenterлер, базалар үчүн Gateway Ишке ашыруулар).
- Frameworks & Drivers: тышкы катмары, ал фреймворктарды (UI, базалар, веб-сервистер) камтыйт.
Көз карандылыктардын инверсиясы принциби маанилүү роль ойнойт. Ички катмары интерфейстерди (Gateway Interfaces) аныктайт, ал эми тышкы катмары ошол интерфейстерди ишке ашырат. Бул төмөнкү схемада көрсөтүлгөн:
+-----------------+ +-------------------+ +--------------------+ +------------------------+
| Frameworks & |----->| Interface |<-----| Use Cases |<-----| Entities |
| Drivers (UI, DB)| | Adapters | | (Interactors) | | (Business Rules) |
+-----------------+ | (Presenters, | | | +------------------------+
| Gateway Impls) | | |
+-------------------+ +--------------------+
Зарылдар көз карандылыктардын багыты көрсөтүлөт. Бардык көз карандылыктар ички тарапка багытталган, Entities катмарынын жакка.
Android өнүктүрүүдө, Таза архитектура көбүнчө төмөнкү компоненттерди колдонуу менен ишке ашырылат:
- UI Layer (Presentation): Activity, Fragment, ViewModel, UI логика. Domain Layerге көз каранды.
- Domain Layer (Use Cases): колдонмо бизнес логикасы. Башка катмары менен көз каранды эмес.
- Data Layer: маалымат буулары (тармактар, базалар), репозиторийлер. Domain Layerде аныкталган интерфейстерди ишке ашырат.
Мисал структура:
root
├── app
│ ├── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── example
│ │ └── myapp
│ │ ├── presentation // UI катмары (ViewModel, Activities, Fragments)
│ │ │ ├── ui
│ │ │ └── viewmodel
│ │ ├── domain // Домен катмары (Use Cases, Entities, Interfaces)
│ │ │ ├── entity
│ │ │ ├── repository // Домен интерфейстері
│ │ │ └── usecase
│ │ └── data // Data катмары (Репозиторийлер, Data Sources, Mappers)
│ │ ├── local // Жергілікті Data Source (Room)
│ │ ├── remote // Қашықтан Data Source (Retrofit)
│ │ ├── mapper
│ │ └── repository // Data жүзеге асырулар, Domain интерфейстерін кеңейтеді
│ └── build.gradle
└── build.gradle
Артыкчылыктары:
- Тестирлөө мүмкүнчүлүгү: Бизнес логика изоляцияланган жана оңой тестирленет.
- Ийкемдүүлүк: Тышкы көз карандылықтарды оңой алмаштыруу (мисалы, Room-дан Realm-га өтүү).
- Туруктуулук: Жоопкерчиликтердин так бөлүнүшү кодду түшүнүүнү жана тейлөөнү жеңилдетет.
- Технологиядан көз карандысыздык: Бизнес логика конкреттүү Android фреймворктөрүнө же китепканаларга байланбаган.
Кемчиликтери:
- Кыйынчылык: Баштапкы түшүнүү жана ишке ашыруу көбүрөөк кыйын болушу мүмкүн, өзгөчө кичинекей долбоорлор үчүн.
- Коддун көбөйүшү: Класстар жана интерфейстердин көбүрөөк жазылышын талап кылат, жөнөкөй архитектураларга салыштырмалуу.
Жалпысынан, Таза архитектура масштабдуу жана оңой тейлөөчү Android тиркемелерин түзүү үчүн күчтүү ыкма болуп саналат, өзгөчө орто жана чоң деңгээлдеги долбоорлор үчүн. Ал бизнес логика айланасында иштеп чыгууга көмөктөшөт, техникалык деталдарга эмес.