Domain Driven Design adalah metodologi dan resep proses untuk pengembangan sistem yang kompleks yang fokusnya adalah memetakan kegiatan, tugas, peristiwa, dan data dalam domain masalah ke dalam artefak teknologi dari domain solusi.
Penekanan dari Domain Driven Design adalah untuk memahami domain masalah untuk membuat model abstrak dari domain masalah yang kemudian dapat diimplementasikan dalam serangkaian teknologi tertentu. Desain Domain Driven sebagai metodologi memberikan pedoman untuk bagaimana pengembangan model ini dan pengembangan teknologi dapat menghasilkan sistem yang memenuhi kebutuhan orang-orang yang menggunakannya sementara juga kuat dalam menghadapi perubahan dalam domain masalah.
Sisi proses Desain Domain Driven melibatkan kolaborasi antara pakar domain, orang yang tahu domain masalah, dan pakar desain / arsitektur, orang yang tahu solusi domain. Idenya adalah untuk memiliki model bersama dengan bahasa bersama sehingga ketika orang-orang dari dua domain berbeda ini dengan dua perspektif berbeda mendiskusikan solusi, mereka sebenarnya mendiskusikan basis pengetahuan bersama dengan konsep bersama.
Kurangnya pemahaman domain masalah bersama antara orang-orang yang membutuhkan sistem tertentu dan orang-orang yang merancang dan menerapkan sistem tampaknya menjadi penghalang inti untuk proyek-proyek yang sukses. Desain Berbasis Domain adalah metodologi untuk mengatasi hambatan ini.
Ini lebih dari sekedar memiliki model objek. Fokusnya adalah tentang komunikasi bersama dan peningkatan kolaborasi sehingga kebutuhan aktual dalam domain masalah dapat ditemukan dan solusi yang tepat dibuat untuk memenuhi kebutuhan tersebut.
Desain yang Didorong oleh Domain: Yang Baik dan Menantang memberikan tinjauan singkat dengan komentar ini:
DDD membantu menemukan arsitektur tingkat atas dan menginformasikan tentang mekanisme dan dinamika domain yang perlu direplikasi oleh perangkat lunak. Konkretnya, ini berarti bahwa analisis DDD yang dilakukan dengan baik meminimalkan kesalahpahaman antara para ahli domain dan arsitek perangkat lunak, dan itu mengurangi jumlah permintaan mahal berikutnya untuk perubahan. Dengan memecah kompleksitas domain dalam konteks yang lebih kecil, DDD menghindari memaksa arsitek proyek untuk merancang model objek yang membengkak, yang mana banyak waktu hilang dalam mengerjakan detail implementasi - sebagian karena jumlah entitas yang harus berurusan sering tumbuh melampaui ukuran papan tulis ruang konferensi.
Juga lihat artikel ini Desain Didorong Domain untuk Arsitektur Layanan yang memberikan contoh singkat. Artikel ini menyediakan uraian thumbnail Desain Domain Driven berikut.
Domain Driven Design mendukung pemodelan berdasarkan realitas bisnis yang relevan dengan kasus penggunaan kami. Karena sekarang semakin tua dan tingkat hype menurun, banyak dari kita lupa bahwa pendekatan DDD sangat membantu dalam memahami masalah yang dihadapi dan merancang perangkat lunak menuju pemahaman bersama tentang solusi. Saat membangun aplikasi, DDD berbicara tentang masalah sebagai domain dan subdomain. Ini menggambarkan langkah-langkah / area masalah yang independen sebagai konteks yang dibatasi, menekankan bahasa yang sama untuk membicarakan masalah ini, dan menambahkan banyak konsep teknis, seperti entitas, objek nilai, dan aturan root agregat untuk mendukung implementasi.
Martin Fowler telah menulis sejumlah artikel di mana Desain Domain Driven sebagai metodologi disebutkan. Misalnya artikel ini, BoundedContext , memberikan tinjauan umum tentang konsep konteks terbatas dari Pengembangan Berbasis Domain.
Di masa muda itu kami disarankan untuk membangun model terpadu dari seluruh bisnis, tetapi DDD mengakui bahwa kami telah belajar bahwa "penyatuan total model domain untuk sistem besar tidak akan layak atau hemat biaya" 1 . Jadi alih-alih, DDD membagi sistem besar menjadi Bounded Contexts, yang masing-masingnya dapat memiliki model terpadu - pada dasarnya cara penataan MultipleCanonicalModels.