Sobes.tech
Middle+

Դու ունե՞ք փորձ մաքուր ճարտարապետության վրա իրականացված նախագծերով աշխատելու։

sobes.tech AI

Պատասխան AI-ից

Այո, կա:

Իմաստության մաքուր ճարտարապետության զարգացման ժամանակ օգտագործեցի հետևյալ շերտերը:

  • Դոմենային շերտ: Ունի բիզնես-լոգիկա և էքսպորտներ: Չի կախված այլ շերտերից: Հստակեցնում է Use Cases (ինտերակտորներ) և repository ինտերֆեյսներ:
  • Տվյալների շերտ: Իրականացնում է Data Layer-ի repository ինտերֆեյսները: Շահագործում է տվյալների աշխատանքը (միացանց, տվյալների բազա, SharedPreferences): Շատ հաճախ օգտագործվում են repository-ներ՝ տվյալների արտածման համար արտաքին աղբյուրներից՝ դոմենային էքսպորտների:
  • Ներկայացման շերտ: Ունի View (Fragment, Activity) և Presenter/ViewModel: Պատասխանատու է տվյալների ցուցադրման և օգտագործողի հետ փոխազդեցության համար: Զանգում է Use Cases-ներին Domain Layer-ից:

Շերտերի միջև կախվածություններ:

  • Ներկայացման շերտը կախված է Դոմենային շերտից:
  • Տվյալների շերտը կախված է Դոմենային շերտից:

Մոդելներ և սկզբունքներ, որոնք կիրառվում են մաքուր ճարտարապետության մեջ:

  • SOLID: Հատկապես կախվածության հակադարձման սկզբունքը:
  • Dependency Injection: Թեստավորման և կախվածությունների կառավարման համար (օրինակ՝ Dagger, Koin օգտագործելով):
  • Repository Pattern: Տվյալների աղբյուրների վրա հիմնված ամպլիտուդ:
  • Use Cases (Interactors): Ներկայացնում են կոնկրետ գործողություններ բիզնես-լոգիկայում:

Նմուշային կառուցվածք՝

├── app
│   ├── build.gradle
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── example
│           │           └── myapp
│           │               ├── data // Repository-ների իրականացման, տվյալների աղբյուրներ
│           │               │   ├── datasource
│           │               │   └── repository
│           │               ├── domain // Բիզնես-լոգիկա, Use Cases, էքսպորտներ, ինտերֆեյսներ
│           │               │   ├── entity
│           │               │   ├── repository
│           │               │   └── usecase
│           │               └── presentation // View-շերտ, ViewModel/Presenter
│           │                   ├── ui
│           │                   └── viewmodel
│           └── res

Շերտերի փոխազդեցություն՝

  1. View-ը կանչում է ViewModel-ի մեթոդը:
  2. ViewModel-ը կանչում է համապատասխան Use Case-ը (բիզնես-լոգիկա):
  3. Use Case-ը հասնում է Domain Layer-ի ինտերֆեյսներին:
  4. Реализациите на repository-ները (Data Layer-ում) ստանում են տվյալները աղբյուրներից (միացանց, բազա):
  5. Repository-ները տվյալները վերածում են դոմենային էքսպորտների և վերադարձնում Use Case-ին:
  6. Use Case-ը տվյալները մշակում է և վերադարձնում է արդյունքը ViewModel-ին:
  7. ViewModel-ը թարմացնում է տվյալները, որոնք ցուցադրվում են View-ում:

Մաքուր ճարտարապետության կիրառմամբ հնարավոր է՝

  • Բարելավել թեստավորելիությունը: Ամեն շերտ կարող է թեստավորվել առանձին:
  • Բարձրացնել պահպանելիությունը: Փոփոխությունները մեկ շերտում նվազեցնում են մյուսների ազդեցությունը:
  • Ավելացնել ճկունությունը: Լավ է փոխարինել տվյալների աղբյուրների կամ UI-ի իրականացման տարբերակները:
  • Նվազեցնել կապակցությունը: Բիզնես-լոգիկայի և իրականացման մանրամասների բաժանում: