Arsitektur yang dapat diskalakan untuk aplikasi seluler besar

Dalam artikel ini, kami tidak akan menguraikan MVP, MVVM, MVI, atau sesuatu seperti itu. Hari ini kita akan berbicara tentang hal yang lebih global daripada sekadar arsitektur tingkat presentasi. Bagaimana cara merancang aplikasi yang sangat besar di mana puluhan atau ratusan pengembang dapat bekerja dengan nyaman? Aplikasi yang mudah diperluas tidak peduli berapa banyak kode yang telah kita tulis.


Persyaratan untuk proyek besar:


  1. Konektivitas kode yang lemah. Setiap perubahan harus memengaruhi kode sesedikit mungkin.
  2. Menggunakan kembali kode. Hal-hal yang identik harus mudah digunakan kembali tanpa menyalin masa lalu.
  3. Kemudahan ekspansi. Seharusnya mudah bagi pengembang untuk menambahkan fungsionalitas baru ke kode yang ada.
  4. Stabilitas. Setiap kode baru dapat dengan mudah dinonaktifkan menggunakan fitur toggle , terutama jika Anda menggunakan pengembangan berbasis trunk .
  5. Kepemilikan kode. Proyek harus dibagi menjadi beberapa modul, sehingga mudah untuk menetapkan pemilik untuk setiap modul. Ini akan membantu kami dalam fase tinjauan kode. Dan di sini tidak hanya tentang hal-hal besar, seperti modul Gradle / Pods, tetapi juga fitur biasa, yang mungkin juga memiliki pemilik berbeda .

Komponen


gambar


. - (MV*) Presenter/ViewModel/Interactor/- . , - - . , , , // . , -, .


, . .


gambar



  1. . - .
  2. . .
  3. . .
  4. . , , .
  5. UI. .
  6. Unidirectional data flow . .
  7. . feature toggles.
    , , , . , - .


gambar


  1. (DomainObject).
  2. (UI State).
  3. .
  4. - ( , ), (Action) , . UI State, (Action) , Service. Service (. 1).


, , (Actions) (Service). Service (DomainObjects) . Service - : UserService, PaymentsService, CartService, : ProductDetailsService, OrderService.


gambar


, , MVP/MVC/MVVM/MVI , ().



β€Šβ€”β€Š , , , , .


:


  • Middlewareβ€Šβ€”β€Š (Actions). , Middleware . .
  • Reducerβ€Šβ€”β€Š Middleware. .

gambar


, Middleware Reducer , Middleware Reducer.
: Flux, Redux, MVI


Server Drive UI


, (DomainObject), . Play Store/App Store. , !


gambar


Dari server kami dapat menerima daftar komponen di layar yang menunjukkan jenisnya, posisi di layar, versi, dan data yang diperlukan untuk pengoperasian dan tampilan.


{
  "components": [
    {
      "type": "toolbar",
      "version": 3,
      "position": "header",
      "data": {
        "title": "Profile",
        "showUpArrow": true
      }
    },
    {
      "type": "user_info",
      "version": 1,
      "position": "header",
      "data": {
        "id": 1234,
        "first_name": "Alexey",
        "last_name": "Glukharev"
      }
    },
    {
      "type": "user_photo",
      "position": "header",
      "version": 2,
      "data": {
        "user_photo": "https://image_url.png"
      }
    },
    {
      "type": "menu_item",
      "version": 1,
      "position": "content",
      "data": {
        "text": "open user details",
        "deeplink": "app://user/detail/1234"
      }
    },
    {
      "type": "menu_item",
      "version": 1,
      "position": "content",
      "data": {
        "text": "contact us",
        "deeplink": "app://contact_us"
      }
    },
    {
      "type": "button",
      "version": 1,
      "position": "bottom",
      "data": {
        "text": "log out",
        "action": "log_out"
      }
    }
  ]
}

Pertanyaan?


Saya berpartisipasi dalam pengembangan beberapa proyek besar menggunakan arsitektur ini, dan saya terbuka baik untuk pertanyaan tentang arsitektur secara umum maupun rincian teknis implementasi Android.


All Articles