Transcript for:
Arsitektur Bersih dalam Backend Golang

Hai Oke coy jumpa lagi dengan back-end magang stay humble dan tetap semangat untuk terus belajar layaknya anak magang Oke saya harap sih semua sehat-sehat ya yang pada nonton dan ya lancar terus karirnya enggak ada masalah Oke jadi kali ini back-end magang tuh bakal bahas tentang ya clean arsitektur utama dalam penerapannya di golang ya dan konteksnya juga dalam ketika di golang ini kita membuat backend services gitu yang istilahnya service ini ya pasti akan membuat API gitu ya sebenarnya agak telat sih saya bahas ini ya soalnya kan di video-video saya sebelumnya itu udah ada contoh project yang apa rekan-rekan ini bisa clone gitu kan dan itu udah nerapin clean architecture sebenarnya ya cuma oke deh karena ada request kita coba bahas mana sih clean architecture ini gitu kan jadi sebenarnya gini ya clean architecture itu kadang tuh Dibikin kayak ribet banget gitu Terus banyak perdebatan disitu ya Cuma kalau menurut saya Ya kita ber Apa namanya tuh Mengacu ke prinsip kita dalam Membuat code lah itu Keep it simple gitu Jadi ya dibikin simple aja Jangan bikin ribet Jadi clean architecture nya apa sih bang ya Kalau yang belum tau ya Intinya clean architecture itu adalah prinsip desain Sebuah software ya perangkat lunak gitu kan yang memungkinkan sistem itu jadi lebih mudah dipahami jelas terus mudah diubah-ubah mudah diganti-ganti gitu ya ada perubahan itu dia nggak ribet mudah diuji juga jadi bakal testable banget dan ya mudah dipelihara tentunya gitu kan dan tujuan maupun kemana penerapan itu intinya klinik struktur ini bakal memisahkan kode-kode kita menjadi ya layer-layer yang terpisah gitu loh sehingga tuh Hai kalau ada perubahan pada suatu bagian itu enggak akan mempengaruhi bagian yang lainnya dan yang tadi ya pasti lebih mudah dipahami karena layer by layer itu udah jelasnya seperti itu jadi ya pada konsep klinik strukturnya setiap komponen itu isinya dia bersifat independen lah dan dikelompokkan ini garis bawah ini dia dikelompokkan nih berdasarkan fungsinya nah gitu jadi dikelompok-kelompokin diatur yang rapuh rapi gitu kan dia harus lebih rapi daripada kamar-kamar kalian ya termasuk kamar saya juga sih sebenarnya jadi tujuan itu ya supaya kode itu lebih mudah lah dikembangkan karena apalagi kalau misalnya ada perlu peningkatan gitu yang lebih kompleks dan yang pastinya kita akan mudah dalam maintenance dan terutama yang tadi saya sebut testing karena biasanya kita bn itu harus bikin unit testing dan seperti itu nah supaya enak ya kodenya tuh harus testable seperti itu ya kayak mana bikin unit testing itu udah ada ya di video saya sebelumnya yang tentang bikin unit testing gak pusing itu juga udah pakai project yang pendekatannya udah clean architecture nanti bisa di clone ya nanti project itu saya pakai lagi di sini sih jadi nanti saya kasih lagi link GitHub nya kalau apa kawan-kawan mau clone gitu biar bisa dipelajari lagi oke biar gak banyak cincong kita langsung aja nah jadi itu sebenarnya sih ada Apa ya, 4 komponen utama lah kalau yang saya rangkum ya Intinya seperti itu, yang paling penting itu ini Dan yang jadi masalah ini kadang komponen-komponen ini tuh Apa ya, bilang itu banyak perbedaannya juga ngomongnya Cuma intinya sih sama gitu Kayak yang pertama itu entities ya Nah entities ini ada yang nyebut model, ada yang nyebut apalah yang lain Intinya Hai eh ini tuh yang isinya bisa objek bisa strak-strak yang itu dia punya kegunaan umum jadi bisa dipakai jadi panggil ke layar-layar yang lain dalam umum apa ya istrinya tuh untuk nerima data-data ini seperti itu itu bukan nerima ya nampung lah intinya seperti itu ya simpelnya kayak gitu terserah lama di definisikan seperti apa intinya dia ini bisa objek bisa strak apapun itu intinya kegunaannya umum seperti itu nah yang kedua Hai yuskes naik ke sini ada yang bilang yuskes layer ada yang bilang bisnis layer ya buat eh sama aja lah ya intinya disitu letaknya teletaknya itu dan dia ini kita pakai untuk logika bisnisnya seperti itu jadi logika spesifik yang nanti dilakukan di sistem kita tuh ditaruh di sini Nah yang ketiga itu ada yang nyebutnya apa ya dengan punya driver ada dan nyebutnya repo ada Hai ini saya simpel yang tulisannya pendek saya tulis ada situ Repo eh bentar guys ini mau jatuh pulang laptop saya sorry gantinya Repo Repo ini tuh intinya tuh dia itu detail yang low levelnya kayak misalnya untuk database terus untuk misalkan ada integrasi ke third party dan lain-lain intinya itu ditaruh disini nah yang terakhir interface interface nih ya ini ada yang bilang interface kalau saya sih sebenarnya bisa nyebutnya sebagai transport layer Ada yang bilang juga Handler Hai yaitu intinya ini kalau dalam konteksnya kita buat service yang untuk API ini untuk jalur keluar masuknya lainnya seperti itu jadi dia yang bakal ngubah data untuk formatnya itu yang lebih sesuai yang bakal diterima sih yuskes layer tadi gitu ataupun layer nanti selanjutnya di seperti itulah ya jadi biar enggak bingung kita langsung aja ya saya ada contohnya oke Hai Oh sebentar nih kok ada ganggu nih layar guys tisu dulu guys Oke kita langsung masuk ke contohnya aja jangan ini dulu yang simpel dulu ya Nah ini ini itu ini enggak usah dibaca kodenya dulu nih ya nanti kita Ano jelai penting kalian lihat sinyal dulu Nah jadi ini ini nggak perlu dulu Hai intinya di project saya ini saya ini punya eh main program itu ada di sini ada di src ini semua ada di sini main-main kodenya ya kode utama itu disini ini saya bagi ini ada app ada infra interface ini terserah lah kalian mau namakan apa namanya tuh folder-folder ini mau kayak apa namanya terserah lah yang penting ini lapisan-lapisan tadi semua ada di sini Hai nah ini misalnya disini di HP ini saya taruhnya ada di Tiongla di Tiongla yang saya pakai sebagai entitas itu tadi gitu loh jadi nanti ini bisa buat nerima data dari luar nerima data yang dari kita ambil dari database nya saya taruh di sini mau dipisah antara itu ada yang buat terima dari luar ada yang buat remodernya dipisah ya bisa aja nggak ada masalah yang penting itu udah pada layar berbeda akan jadi agak Hai lebih rapi dan lebih kelihatan lah Oh ya kalau ada yang belum tahu di itu apa Bang di toto data transfer objek dia seperti itu nah ini seperti ini ini kan kira-kira yang saya pakai ya gini-gini aja lah ya nggak terlalu ribet untuk bagian ini juga sama dan untuk apa bis itu kalau kita ada function ada suatu logic di setiap layer ini ya kita ya hubungkan ke layer lain itu dengan interface seperti ini ya karena kan bisa aja nih ini metode validate nah metode validate ini bisa aja untuk memvalidasi banyak sih struck request yang saya bikin ini nih ini kan ada satu ada dua nah disitu saya kembali ke prinsip kita coding itu ya Dyr lah ya don't eh Dyr Dry don't repeat yourself repeat sorry don't repeat yourself Hai ada yang bilang don't repeat your code sama aja lainnya jangan diulang-ulang itu jadi kita buat satu Valley evalida saya kita buat satu interface seperti ini dan kenapa pakai interface ini ya tadi seperti saya bilang kita harus mudah buat struktur kode indeks struktur kode kita ini untuk mudah dites mudah dibikin unit testingnya ini dengan ada interface ini kan nanti mockup mockup itu kita tinggal ambil interface nya aja jadi nggak perlu tahu nih ada proses apa di dalam setiap metode itu seperti itu jadi Hai aku desain ini juga menerapkan prinsip solid principle mana penjelasannya solid principle itu udah ada di video sebelumnya lah jadi enggak dibahas disini lagi bisa ditonton di video sebelumnya tentang solid principle Nah selanjutnya ini tadi ini urutan ini aja ya nggak usah ikutan urutan yang tadi di slide ya 1234 nya biar atas kebawah aja biar enak nah ini yuskesa yuskes inilah yang dipakai untuk logic bisnisnya gitu ini sibuk nih ngapain sih Oh get by subject nih kayak mana Nah kebetulan disini untuk nanti bagian si Repo itu tuh saya kalau di project ini enggak pakai SQL ya cuma pakai redis sini jadi ya tapi itu sama aja ya konsepnya nanti si get subject ini dia akan manggil ke Repo seperti ini sama yang selanjutnya juga akan seperti itu dia seperti itulah ya kita pisahin nih nah ini sama saya buat interface juga Hai dan kebutuhan-kebutuhannya sih use case ini ya saya taruh di sini nih di use case track ini nah ini ada kebutuhan dari repo nah ini ada satu eh requirement lagi ya dependensi lagi lah terserah bilangnya apa ini untuk integrasi ke third party kebetulan ya di project ini tuh ada integrasi ke third party nah ini saya taruh di apa nama itu bilangnya dikelompokkan di layar yang sama seperti itu nanti bisa kelihatan Hai kalau yang ini yusuf.com ini sebenarnya biar gampang aja jadi saya nge-up eh bilang tuh meng-cater semua sius kesitu dalam satu serat ini biar ganti gampang manggilnya nah baru ini yang tadi saya sebut yang si repo-repo ini ya ada yang bilang itu driver ya intinya sama aja nantinya ini untuk yang ke low levelnya itu kayak misal ke DB tadi ke third party atau apapun itu nah ini termasuk di sini ada membutuhkan broker, circuit breaker, konfigurasi dan code nya saya taruh di sini ini seperti itu untuk broker nya disini saya pakai NATS ya cuma kita nggak usah bahas kayak mana nantinya di sini lah yang kebutuhan infrastrukturnya nih jadi saya taruh di sini seperti yang tadi Ada si Redisnya, ini saya taruh disini Nah ini untuk konfigurasi Redisnya, inisiasinya disini Nah si Redisnya tadi kan ada metode-metode yang dipanggil tuh di use case Nah itu ada disini nih Ini si set data, si get data Dan kembali untuk komunikasi mereka antar layar kita taruh di sebuah interface seperti ini Kayak mana sih su, kenapa ditaruh di interface itu kan ya nanti bisa dilihat lah ya untuk unit testingnya Hai nah baru nih yang terakhir saya taruh di sini namanya interface ini yang saya sebut transport layer atau ada yang bilang hender ada juga yang bilang interface ya sama aja lah ya Nah di sini ya ini kebetulan saya bagi apa saya kelompokin lagi rest itu karena kadang di project dikerjaan saya itu enggak cuma rest itu ada gpc juga dan ada yang lain-lain seperti layak nah disini nih kelompokin semuanya dari handler terus Hai Nah kenapa sih respon ini ada di sini ya karena menurut saya ya ini opini saya aja sih eh metode-metode yang metode lagi metode-metode yang saya gunakan untuk membuat respon itu kan hubungannya sama si interface ini jadi ya saya taruh di sini inti pengelompokkan ajalah supaya lebih rapi dan ya lebih mudah di-mantain nantinya nih hendernya nih tadi ada sibuk dan lain-lain Hai ini kan si layer interface ini atau si transport layer ini yang nantinya bakal terima nih data dari luar nih terus nanti diterusin datanya itu ke use case nya seperti ini dipanggil use case nya ini kebutuhannya seperti ini nah ini kebetulan dia juga apa nama itu ada kebutuhan untuk rate limiter ya bisa dipelajari di video yang rate limiter ya kebetulan aja saya pakai di sini gitu jadi ini kadung udah ada nanti seperti inilah ya Hai Oke nah setelah itu ya ini untuk root dan sebagainya saya lanjutin sini ada root-root gimana kali ini terus keseruan rootnya itu yang paling depan setelah gini dires ini tepatnya itu di sini Aduh kelewatan Nah inilah rooting rooting untuk ke bikinnya saya taruh di sini seperti itu Jadi intinya begitu ya kita clean architecture itu pokoknya kita pisahin layar-layar ini berdasarkan ya kelompok fungsinya gitu. Jadinya nanti ketika di maintenance lebih gampang dan yang tadi saya sebut adalah untuk unit testing. Kita buat kode yang testable. Contohnya seperti ini ya. Ini si books ini.

Nah di ini kan ada kebutuhannya itu ke. Oh ini integrasi belum saya jelasin ya. Sorry kita kelompat.

nah integrasi ini sebenarnya cuma untuk ke third party aja sih karena ini bagian juga untuk low levelnya untuk ngambil sesuatu data gitu kan kita mau retrieve data entah itu dari database entah itu dari cache ataupun dari third party makanya ini saya kelompokin disini ini ada integration nah ini tuh dia tuh ke ini ya ke open library ini gitu dia ngambil data dari sini ya seperti itu nah kita kembali kesini ke si book ini berarti kan disini dia membutuhkan si book integration dan dia membutuhkan si Paket yang udah kita buat tadi Untuk redisnya seperti itu Nah jadi disini kan kita lihat nih Di getbook by subject ini Dia bakal ngambil redis Redis get data Terus dia juga ada redis set data Ini kita pakai disini Dan dia juga ngambil data ini Ini kelewat terus integrasi ini ya Ngambil data dari si integration ini Metode ini sebenarnya kan Gini ya Dia ngambil data dari Ini getbook by subject ini dari si open library itu kalau data itu udah ada kita cek dulu di redis ini udah ada atau belum kalau belum baru diambil data kesini tapi kalau misalnya dia udah ya dia gak akan sampai sini dia akan disini aja nih di lantiga 4 ini nah kalau dia belum ada diambil disini terus kita set juga ke redisnya jadi nanti bakal lebih cepat ngambilnya intinya di metode ini tuh gitu ya jadi saya bukan mau jelasin redis nah setelah itu kan kita bisa buat unit testingnya Hai nah seperti ini saya bilang tadi nih ketika di to nya itu dia butuh apa redisnya dia butuh apa ini kan kita bisa buat mockupnya nih nah ini yang saya masuk dengan ketika kita buat layer itu apa namanya the independent gitu ya terus kita tinggal hubungkan antar layer ini dengan sebuah interface ini nya nanti kita bakal enak di proses mockup nya contohnya seperti ini tadi kita mockup misalnya yang si redis nah ini kan kita tinggal Hai mocap aja nih kita panggil aja jadi dari interface mana set data tuh ngapain get data tuh ngapain kita nggak perlu tahu keseluruhan di dalam sebuah metode itu bakal ada apa aja disini kan mokapnya pokoknya dia bakal segit data nih misalnya dia bakal terima argumen paramnya apa keluarnya bakal apa jadi ketika dia getnya apa oke atau enggak di seperti itu nanti kalau ini mau dipelajari detailnya tentang ini testingnya di video saya sebelumnya itu udah ada Hai dengan mockup yang lebih gampang seperti ini kan jadi nanti pas kita unit testing juga lebih enak contoh seperti ini nih mau apa kita udah set up misalkan ini kan kita tes get by subject from ready success jadi intinya di tes yang pertama ini dia dari resenya sukses atau enggak gitu kan udah akan kita tinggal bikin DTO nya panggil simoknya jadinya kita panggil popnya mockupnya terus ya kita panggil ini yuskes aslinya nih baru kita lakukan tesnya misalnya kalau ini saya jalankan semua Hai Sarko belum keluar sih Hai bisa keluar loh Hai nah ini udah ada keluar agak lola nih kayaknya kita bisa lihat di sini nah ini kan kode saya udah cover it's one 100% Hai tuh gini jadi dengan clean arsitektur struktur kita rapi dan pengkodingan kita juga rapi tapi ya walaupun kita udah Hai istilahnya melakukan pendekatan clean asitektur tapi kita buatnya juga enggak rapi kayak misalnya ada kode yang berulang terus juga enggak kita keluarkan dari layer by layer itu dengan interface ya bakal tetap itu jadi enggak clean di seperti itu jadi ya intinya clean asitektur itu ya mudahnya tuh seperti inilah ya kita bikinnya ini udah 100% covered Jadi kalau dari situ kita bisa simpulkan gitu Jadi manfaat dari clean architecture itu Ya pertama pasti testabilitas ya Karena akan memudahkan penulisan kita dalam menulis unit testing gitu Karena setiap layar tadi kan terpisah gitu Jadi dia nggak ada ketergantungan gitu ke layar-layar yang lain Seperti itu Dan yang kedua ya jelas maintainability Karena Akan lebih mudah nih pemeliharaannya dan pengembangannya lebih lanjut ya Karena perubahan di satu layer itu gak akan terlalu Bahkan yang gak akan mempengaruhi layer yang lain Seperti itu Dan yang paling jelas itu adalah independensi Jadi aplikasi kita itu gak akan bergantung pada hal-hal eksternal tertentu Jadi lebih fleksibel dalam misalnya kita mau pemilihan teknologi Hai jadi kayak misalnya di kasus yang payah ini tadilah misalkan yang di infra ini jadikan nih di bagian infra ini saya butuh banyak teknologi nih ini yang tadi kalau orang sebutnya bisa repo ada yang bisa infradeng bilang ya driver ya macem-macem lecce intinya kita buat layer khusus buat itu seperti itu jadi ada Hai teknologi saya butuh broker dan broker ini misalnya saya pakai Nat dan nanti kalau misalnya brokernya ada tambahannya pakai rabbitnya pakai kava juga ya udah tambahin aja di sini gitu loh ini ada butuh sirkuit breaker gitu kan terus ada misalnya ini tadi nih butuh integrasi ke tepati terus juga untuk database misalnya saya masih pakai redis disini nah ini kan bisa juga nanti misalnya otoritennya butuh Disimpan ke database tradisional Kayak misalnya di SQL gitu ya Udah kita tinggal tambahin aja database-nya Disini gitu Kita tambahin satu folder lagi lah Bisa dibilangnya gitu kan Dia seperti itu Jadi kita bisa gonta-ganti Bahkan bisa dapat nambah lah gitu ya Menambah database, menambah teknologi apapun Tanpa mempengaruhi ya Si logic business-nya gitu ya Logic business itu tadi yang ada di Use case-use case ini gitu Dia gak akan terpengaruh Secara signifikan gitu Kalau ada perubahan sesuatu disini Kecuali emang ini dia pakai apa ya Baru kita ubah gitu Kesesuaiannya nanti seperti itu Jadi pokoknya dalam Clean architecture ini Kita kembali ke Apa ya bilangnya itu Prinsip utama lah Yaitu adalah KIS Keep it simple Terus DYR Eh DY Don't repeat yourself Atau don't rewrite Hai yourself terserah lainnya enggak usah diulang-ulang seperti itu jadi ini tuh prinsip pentinglah dalam menjaga kode kita itu supaya ya lebih clean dan mudah di menten yang udah dipelihara dan ya kita bisa juga terapin ya bukan bisa juga ya mungkin lebih agak harus gitu ya menerapin ya solid principle juga gitu supaya ya kualitas desain kita ini juga bakal lebih baik lagi ini seperti itu dan ya kita akan lakukan kode review terus gitu Terutama ketika misalnya ada unit testing yang tidak berhasil Itu kan kita bisa lihat apakah memang salah dari datanya Misalnya data dari database atau data dari third party Atau mungkin memang ada proses penulisan kode kita yang memang belum testable Jadi intinya clean architecture seperti itu ya Tidak usah terlalu susah Dibikin simple saja Pokoknya intinya ini kembali ya saya anuin intinya kita bagi struktur project kita itu dengan layer-layer yang pengelompokannya itu jelas terhadap fungsinya gitu jadi semua itu independen dalam kelompoknya gitu jadi nggak saling ketergantungan seperti itulah ya oke jadi sebenarnya klinik arsitektur nggak terlalu panjang sih gitu-gitu aja lah ya jadi saya rasa sih cukup sekian itu aja Ya kalau ada yang kurang jelas Ada yang mau ditambahin Tambahin aja di komen Tanya aja di komen Segera saya jawab Kalau nggak lagi sibuk Jadi ya gitu lah ya Terima kasih supportnya sejauh ini Terus support Beken Magang dengan subscribe Like Dan terutama share ya Karena siapa tau nih Ada teman-teman Rekan-rekan kita yang lagi Ada masalah tertentu Yang mungkin bisa terbantu Dari video-video yang saya bagikan Seperti itu Jadi sekali lagi terima kasih Salam Back End Magang