Domain Driven Design (DDD) dan Microservices
Pendahuluan
Domain Driven Design (DDD) adalah konsep yang digagas oleh Eric Evans pada tahun 2003, mengenai bagaimana seharusnya sistem perangkat lunak dirancang untuk menyelesaikan persoalan bisnis yang kompleks.
Konsep nya ini berusaha untuk membuat aplikasi dibuat dengan “mindset” bisnis dibandingkan dibuat dengan “mindset” teknis.
Konsep ini berusaha mendekatkan istilah business (dalam hal ini disebut “domain”) ke dalam implementasi teknis.
Tujuannya agar lebih mudah memodelkan, berkomunikasi, dan menyelesaikan persoalan, antara tim bisnis dan tim teknis.
Gagasan ini jauh sebelum istilah Microservice menjadi terkenal sekarang ini.
Istilah microservice pada awalnya juga muncul di berbagai kesempatan tidak lama atau bisa jadi berbarengan dengan saat konsep DDD ini diperkenalkan.
Walaupun secara konsep, microservice ini juga sudah diimplementasikan sebelumnya, tetapi dengan istilah yang berbeda tentunya.
Persepsi awal
Selintas lalu, antara microservice dan DDD (Domain Driven Design) ini kelihatannya semirip.
DDD dengan konsep domain bisnis nya yang kental, dan sementara itu Microservice juga dibuat terpisah-pisah berdasarkan business capabilities.
DDD juga mempunyai bounding-context atau batasan permasalahan di tiap domain, sementara Microservice juga ada.
Tetapi konsep ubiquitous language mungkin yang menjadi pembeda yang paling kentara antara keduanya.
DDD mempunyai ubiquitous language, yaitu bahasa bersama antara pihak bisnis/domain dengan pihak teknis.
Sementara microservice sendiri tidak mengenal konsep ini.
Hmmm, jadi gimana dong ??
Analisa lanjutan
Hmm, sepertinya Microservice memang sebuah konsep yang berbeda dengan Domain Driven Design.
DDD (Domain Driven Design) kalau dilihat lebih merupakan konsep dan proses dalam mendesain sebuah aplikasi secara iteratif dan berkelanjutan, dengan kolaborasi bersama tim bisnis/domain dengan tim teknis.
Terutama untuk aplikasi yang rumit dan membutuhkan pendalaman mengenai proses bisnisnya.
Didalamnya terdapat proses-proses pengumpulan informasi, proses kategorisasi, kolaborasi antara tim bisnis dan tim teknis, dan beberapa software pattern yang digunakan sebagai alat untuk mempermudah pembuatan aplikasi dengan alur bisnis yang rumit.
Boleh dikatakan DDD ini semirip dengan proses Agile yang biasa kita lakukan di keseharian profesionalisme kita.
Akan tetapi DDD lebih memfokuskan kepada desain, komunikasi dan kesamaan perspektif diantara semua pihak yang terlibat dalam pembuatan aplikasi.
Harap diingat, ketika Eric Evans mengenalkan konsep ini pada tahun 2003, pada saat itu dunia IT juga sedang tren untuk melakukan layering dan inovasi di bidang teknis.
Konsep REST, Service Architecture (SOA), dan juga inovasi lainnya baru bermunculan di tahun-tahun itu.
Sehingga sepertinya orang lebih sibuk untuk memikirkan bagaimana sebuah aplikasi dibuat dengan konsep teknis yang bagus, modular, berorientasi service, dll.
Hal ini menjadi konflik dan penghalang dari sebuah aplikasi terkait bisnis untuk bisa berkomunikasi secara leluasa dengan tim teknis dalam menyelesaikan permasalahan yang ingin dibuatkan aplikasinya.
Tim bisnis/domain mempunyai bahasanya sendiri, dan tim teknis/IT mempunyai bahasa dan layering nya sendiri dalam membuat aplikasi.
DDD ini muncul untuk menjembatani permasalahan diatas.
Microservices
Microservice sendiri dari awal merupakan konsep teknis dan bukan konsep proses.
Microservice adalah makanannya tim teknis/IT.
Merekalah yang akan menentukan business capabilities seperti apa yang cocok untuk sebuah microservice.
Apa batasan-batasan dan bounding context nya.
Bagaimana antara microservice saling berkomunikasi, dll.
Walaupun terbentuknya microservice tidak terlepas dari pemahaman bisnis/domain yang didapat dari permasalah bisnis.
Tapi boleh dibilang DDD merupakan konsep design dan development di level yang lebih luas/abstract dan lebih dekat ke sisi bisnis, sementara Microservice merupakan konsep pattern/pola development di level teknis.