Clean Architecture in Android?

Yaps, sedikit cerita tentang bagaimana penerapan Clean Architecture di Android. Sample project menggunakan Kotlin.

Yoga C. Pranata
Style Theory Engineering & Data
4 min readNov 6, 2018

--

Image from picjumbo_com on Pixabay

What is Software Architecture?

Arsitektur Aplikasi dari setiap perusahaan atau setiap developers team pasti berbeda-beda, tapi dari setiap arsitektur memiliki tujuan yang sama, yaitu:

Discipline of creating such structures and systems

Arsitektur yang disepakati bersama ini memudahkan tim maupun developers lain (terutama yang baru masuk sebagai team member) bisa membaca codingan maupun structure project atau class yang telah dibuat sebelumnya. Karena telah dibuat kesepakatan tentang arsitektur apa yang dipakai, biasanya memudahkan Technical Writer untuk membuat documentation setiap project atau aplikasi yang dibuat.

Why we should concern about that?

Pertanyaan yang paling common dikalangan para developers, tapi masing-masing dari mereka memiliki pendapatnya sendiri-sendiri. Setiap developers memiliki arsitekturnya sendiri, bahkan mungkin ada yang agak selfish terhadap arsitekturnya, dan tidak mau menerima arsitektur lain.

Pertanyaannya, apa yang bisa menjamin code kita sudah readable, easy to modify and testable?

Berdasarkan pertanyaan diatas, munculah arsitektur-arsitektur diluar sana yang (harapannya) bisa membantu para developers dalam membuat aplikasi lebih rapih strukturnya, lebih mudah untuk ditest, dan mudah dimengerti oleh developers lain (terutama untuk new team member).

What is Clean Architecture?

Berdasarkan referensi diatas, Clean Architecture adalah salah satu solusi arsitektur yang ditawarkan oleh Uncle Bob.

Dalam bukunya Uncle Bob yang menjelaskan tentang Clean Code, Clean Architecture ini lebih menekankan ke penerapan SOLID Principle, terutama Single Responsibility Principle.

Layers for implementation Clean Architecture

Dalam penerapannya, mungkin bisa berbeda-beda setiap orang, Tapi untuk starting point, kita akan menggunakan 5 Layers seperti dibawah ini:

Layers Structure

1. Domain

Disini berkaitan dengan model bisnis yang dimiliki oleh aplikasi kita. Dalam penerapannya, saya ambil contoh seperti Use Cases, Navigation Router. Sebagian besar aplikasi android yang dibuat adalah menggunakan API, sehingga kemungkinan aplikasi akan lebih banyak berinteraksi dengan cara Requesting dan Persisting. Maka dari itu Layers ini akan sangat berguna untuk mengelompokkan Use Cases yang telah dibuat.

2. Data

Layer ini berfungsi sebagai tempat dimana kalian bisa mendefinisikan tentang variasi Data Model yang akan digunakan dalam aplikasi. Dalam pembuatan aplikasi, sebaiknya kalian menyimpan data secara local.

Maksudnya adalah agar aplikasi tidak selalu mengambil data dari API maupun dari resources lain setiap aplikasi dijalankan. Jadi, Layer ini bisa difungsikan untuk menyimpan Attribute Data untuk Local Database maupun Response Data dari API.

3. Presentation

Presentation Layer gunanya untuk mengelompokkan class yang berfungsi sebagai / berinteraksi dengan UI. Mungkin dalam penerapannya, kalian memiliki cara pandang masing-masing.

Layer ini biasanya berisi Android UI (Activity, Fragment, Views), Presenter atau ViewModels tergantung Pattern apa yang kalian pakai.

4. Use Cases

Use cases ini biasanya di istilahkan dengan Interactor, yang berisi fungsi-fungsi untuk mengambil atau mengirim data ke API. Kenapa butuh Layer ini? karena bisa memudahkan kalian jika ingin membuat Mocking Request ke API untuk keperluan Unit Test. Kita ambil contoh seperti dibawah ini (Unit test menggunakan Library Mockk) :

5. External

Kita biasa membuat Function-function atau Object yang konteksnya bisa jadi Reusable function atau Class. Contohnya seperti Helper Class, Util Class, Scheduler Class, Constant Object, dll. Fungsi-fungsi atau variable yang ada di Layer ini harus as simple as possible karena sifatnya harus se-reusable mungkin.

How to implement above layers into Application Project?

Well, semoga kalian mudah dalam memahami tulisan saya tentang penerapan Clean Architecture ini. Karena yang paling penting dalam arsitektur ini adalah bagaimana penerapannya dalam aplikasi kita dan memahaminya.

Project Diagram

Sebagai latihan, kalian bisa melihat Sample Project dari github saya, Project dibuat menggunakan Kotlin:

Saya tidak akan menjelaskan terlalu detail tentang aplikasi tersebut, kalian bisa Clone atau Fork proyek tersebut dan bisa kalian pelajari sendiri. Berikut sekilas tampilannya:

Conclusion

Clean Architecture ini bisa dipakai di Pattern apapun yang kalian ingin gunakan (MVP, MVVM, MV*), karena arsitektur ini bertujuan supaya memudahkan kalian dalam pembuatan aplikasi supaya lebih Testable, more readability, and as clean as possible.

Usahakan setiap kalian ingin membuat Class baru, pikirkan terlebih dahulu Class yang ingin dibuat termasuk di Layer apa. Sehingga meminimalisir House Keeping atau Refactoring code yang bisa menguras waktu dan tenaga kalian dikemudian hari.

Happy Coding :)

--

--