Android architecture in a clean way !

Ibnu Muzzakkir
Tunaiku Tech
Published in
5 min readJun 10, 2018

Kalau kita berbicara tentang design architecture di android sebenarnya itu gak jauh — jauh dari MVP, MVVM, atau MV*. Seolah — olah google sendiripun juga tidak memberikan best practice kita mau pilih architecture yang mana, ini tergantung dari kita dan project yang sedang kita buat.

Google IO 17 sudah mulai terlihat bahwa google akan mengarahkan kita ke arah MVVM Pattern. kenapa? karena dia punya Architecture Component dimana didalamnya terdapat view model dan ditambah dengan databinding, tp view model yang dimaksud memang lebih keren dari view model biasanya yang ada pada MVVM Pattern karena dia mampu handling sampe ke lifecycle activity.

Google IO 18 menjawab bahwa sekarang google sudah mulai memperlihatkan starter pack untuk kita yang bingung mau pake pattern apa melalui android jetpack. kalau dilihat sih supaya architecture componentnya secara gak langsung dipake sama orang :D. haha itu hanya lelucon semata. tapi ini keren banget terobosan baru dari google buat starterpack supaya kita yang baru kecemplung di dunia Android bisa langsung ngecode dengan benar dalam artian “clean code

Gua gak mau banyak bahas soal android jetpack karena udah banyak banget yang bahas, sesuai dengan goal dari artikel ini mengenai clean way, jadi apapun pattern yang kalian pake yang penting code kalian itu “clean code”, apa sih maksudnya ? code kalian tetep bisa di test, gampang untuk di scale , dan tentunya ngikutin best practice yang sudah ada supaya orang lain bisa mudah mengerti kalau melanjutkan kerjaan kalian dikemudian hari.

Kalau berbicara tentang best practice yang ada supaya codenya bisa “clean code” gimana sih ?

Sebenarnya kalau ada pertanyaan seperti itu, balik lagi ke konsep yang sudah ada. teori yang paling terkenal itu SOLID Principle dan Clean Architecture. jika kalian sudah mencoba untuk menerapkan minimal solid principle ke dalam cara kalian problem solving lewat coding secara tidak langsung sebenarnya kalian sudah mencoba untuk mengcode secara clean way.

Namun akan terasa kurang kalau kita tidak melirik clean architecture. btw konsep clean architecture ini gak cuma bisa diimplement di Android saja ya namun bisa diimplement di dunia lain. apa sih clean architecture ? gua gak akan jelasin banyak karena udah banyak banget artikel di luar sana yang bahas tentang ini, namun intinya dia akan membagi project kalian kedalam beberapa layer seperti Data, Domain, Presentation, External, Device , dll.

Inti dari clean architecture sebenarnya memisalkan class sesuai dengan responsibilitynya ke dalam sebuah wadah ( module / package ) agar memenuhi beberapa point dibawah ini :

  • Independent of Frameworks
  • Testable.
  • Independent of UI.
  • Independent of Database.
  • Independent of any external agency.

How to implement android architecture in clean way ?

Untuk sobat — sobat semua gua sudah buatkan sample project yang menggunakan prinsip clean architecture, kalian langsung bisa cek disini https://github.com/astroidnu/AndroidCleanArchitecture. coba dipelajari secara sekasama dan gua akan coba bantu untuk menjelaskannya secara perlayer.

Project samplenya ini tentang Movie Apps ( keknya udah basi banget ya contoh ini, soalnya dikit — dikit contohnya movie apps.) haha. tapi jangan diliat dari jenis appsnya namun lihat gimana cara membuat projectnya karena nilai tersebutlah yang akan menjadi jadi point penting pada artikel ini.

Project Movie apps ini terdiri dari beberapa layer diantaranya :

A. Data

Layer data ini bisa dibilang tempat berkumpulnya para kelas — kelas yang ada hubungannya dengan data mulai dari yang ada hubungannya dengan network, database sampai ke view object (entities).

Gimana cara mengkategorikan class untuk layer ini ?

Untuk mengkategorikan class apa aja yang cocok masuk ke layer ini sih sebenarnya kita perlu melakukan analisa terhadap project yang telah kita buat. berikut ini adalah beberapa kriterianya :

  • Cek apakah aplikasi kita memerlukan koneksi ke api atau tidak ? jika ya masukkan beberapa file yang terkait dengan network / rest yang kita gunakan di dalam layer ini
  • Cek apakah aplikasi kita memerlukan modeling terhadap database ? jika ya, letakkan file untuk modelling databasenya di dalam layer ini
  • Jika terdapat beberapa file di luar point — point diatas dan menurut kalian masuk ke kategori data silahkan masukkan filenya.

B. Domain

Layer domain ini bisa dibilang tempatnya usecase berkumpul. Fungsi dari use case sendiri yaitu untuk menempatkan case yang spesifik dari bisnis flow, dimana use case yang dimaksud disini adalah ketika ada hubungannya dengan flow data dari dan ke entities.

Gimana cara mengkategorikan class untuk layer ini ? dan usecase yang kaya gimana sih sebenarnya yang bisa kita kategorikan di layer ini ?

Ada beberapa kriteria yang harus kita perhatikan sebelum mengkategorikan class ke dalam layer ini yaitu :

  • Pastikan usecase yang kalian buat itu apabila dirubah tidak akan mempengaruhi entities. misalnya kalian punya code untuk fecthing data movies dari rest. jangan sampai ketika kalian coba untuk merubah function fetchmovie rest itu juga ngerubah entities yang ada padahal kan gak ada hubungannya.
  • Kemudian layer ini juga tidak boleh berpengaruh akan layer lain yang ada hubungannya dengan database, UI, ataupun hal external lainnya.
  • Apabila terjadi perubahan code pada layer ini, maka hanya layer ini sendiri yang akan terkena impactnya dari apa yang dirubah

C. Presentation

Layer presentation ini tempat berkumpulnya segala hal yang berhubungan dengan ui, base ui atau related dengan “ presentation class ”. Presentation class itu maksudnya class yang digunakan untuk melakukan penyajian kepada user interactions. contoh dari class yang bisa dikategorikan ke dalam layer ini adalah Activity, Fragment, BaseActivity, etc.

Btw di dalam project movie apps ini gua menggabungkan konsep MVP pada layer ini. jadi struktur filenya akan ada presenter pada setiap fitur yang sedang dibuat, hal ini bertujuan agar waktu melakukan testing pada layer ini khususnya pada bagian fitur hanya melakukan test pada file presenternya saja.

D. External

Layer external ini tempat berkumpulnya class yang tidak ada hubungannya dengan layer — layer pada point — point sebelumnya dan sifat class pada layer ini bertujuan untuk membantu fungsi yang akan dijalankan pada class lain. contoh dari class yang bisa dikategorikan ke dalam layer ini adalah Extension Function, Helper, dll.

Kesimpulan

Apapun pattern yang kalian pilih MVP/MVVM/MV* jangan sampai lupa untuk implementasi clean architecture dan solid principle karena penting banget sih menurut gua. gunanya supaya code kita clean, scaleable, maintainable. jadi tunggu apa lagi ? kalau tidak sekarang kapan lagi ? :D . #HappyCoding

Referensi

http://4.bp.blogspot.com/-hfZNfkVWp7Y/UF80P71zmbI/AAAAAAAABgY/-E0hEXDMo6Q/s1600/wallpaper-2108768.jpg

--

--

Ibnu Muzzakkir
Tunaiku Tech

Strong Research, Hot tea and bread ! that’s enough. Follow my Github : https://github.com/astroidnu