Apa yang dimaksud dengan Pengembangan Berbasis Domain dalam istilah praktis? [Tutup]

24

Saya mendengar tentang Pengembangan Berbasis Domain dari seorang pengembang di daerah tersebut. Dia berbicara seolah-olah itu hanya tentang peluru perak untuk mengubah persyaratan.

Saya membaca wiki . Masih belum terlalu jelas. Apa itu "3D" dalam istilah praktis? Apakah benar-benar menakjubkan bahwa sekarang diagram kelas UML sudah usang?

P.Brian.Mackey
sumber

Jawaban:

29

Yah, pertama-tama, saya tidak berpikir bahwa artikel Wikipedia yang Anda rujuk sangat bagus, terutama karena merujuk banyak hal yang hanya merupakan tambahan untuk Desain yang Didorong oleh Domain dan tidak banyak memberi pencerahan kepada siapa pun tentang praktik ini.

Tapi, sebagai seseorang yang telah membawa Domain Driven Design ke hati (yang biasanya berlaku oleh DDD, bukan 3D, untuk apa nilainya), saya selalu merasa dasar-dasar DDD jelas, jika Anda membaca begitu banyak seperti bab pertama Eric Buku Evans. Tetapi ini adalah serangkaian pola dan praktik, sehingga tidak mudah untuk memberikan ringkasan 3 kalimat tentang apa itu dan apa keuntungannya tanpa masuk ke beberapa detail. Detail mana yang cocok dengan satu orang mungkin sangat berbeda juga; mungkin 10 tahun yang lalu saya tidak akan mengerti intinya sama sekali.

DDD bukan peluru perak. Ketika dilakukan dengan bijaksana, ini tentang mengambil pendekatan seperti pengrajin untuk membangun perangkat lunak, dan mengenali kebutuhan untuk mengurangi gesekan kognitif antara tim pengembangan dan bisnis tempat mereka membangun perangkat lunak. Salah satu praktik paling penting adalah memiliki lapisan di mana kosa kata domain yang digunakan oleh tim perangkat lunak dan tim bisnis cocok sedekat mungkin. Anda membangun lapisan ini berulang saat Anda memahami masalah bisnis yang Anda coba selesaikan. Ketika logika bisnis disandikan secara masuk akal dalam lapisan ini, terisolasi dari semua dependensi yang berbelit-belit yang biasanya dimiliki oleh aplikasi perusahaan dengan memasukkan interaksi dengan sistem-sistem tersebut ke antarmuka, bahasa yang digunakan dalam lapisan domain aktual akhirnya menjadi cukup ringkas, jelas, dan mudah dibaca.

Mempertimbangkan bentuk yang saya lihat pada sebagian besar perangkat lunak perusahaan dalam, dalam praktiknya, DDD mungkin terdengar seperti peluru perak, karena sebagian besar perangkat lunak perusahaan memiliki pemisahan yang sangat buruk sehingga hampir tidak dapat diuji, dan tim perangkat lunak hidup dalam ketakutan besar akan perubahan karena mereka tidak tahu apa efek samping dari perubahan kode sepele bahkan mungkin, sedangkan lapisan domain dengan faktor yang benar akan secara independen dapat diuji dan diverifikasi. Tetapi sebenarnya, DDD mengakui bahwa sistem jarang ada dalam isolasi. DDD mencakup pola koping untuk sistem lama (lapisan anti-korupsi, konteks terbatas, untuk beberapa nama).

Jika Anda mempraktikkan desain berorientasi objek, termasuk disiplin longgar, dan Anda mempraktikkan pengujian dengan cukup religius, dan Anda kode refactor tanpa ampun, dan Anda bekerja dengan pakar domain saat membangun sistem Anda, pada dasarnya Anda akan berakhir dengan hasil yang pada dasarnya apa yang dibicarakan oleh para pendukung desain berbasis domain.

Ada beberapa pola spesifik yang dijelaskan dalam buku Evans yang berlaku sebagian besar untuk pengembangan perangkat lunak perusahaan, dan beberapa yang merupakan prinsip yang cukup universal, tetapi pada dasarnya, DDD adalah pendekatan pragmatis untuk pengembangan perangkat lunak yang, dari waktu ke waktu, dapat mengurangi penumpukan utang teknis, dan membuat pelanggan Anda lebih bahagia karena Anda dapat berbicara bahasa yang sama satu sama lain, dan memberikan solusi yang lebih baik karena keuntungan dari saling memahami dengan lebih baik.

Jason True
sumber
6

Deskripsi tingkat tinggi bisa berupa -

Model kelas Anda untuk mencerminkan struktur data dan perilaku domain masalah Anda.

Ini memungkinkan Anda untuk memetakan perubahan dalam domain masalah Anda secara langsung ke perubahan dalam kode Anda, jadi itu akan lebih mudah untuk diperbarui saat domain masalah Anda berkembang.

PenFold
sumber
2

PENOLAKAN: Saya telah menambahkan jawaban ini setelah pertanyaan ini ditandai sebagai duplikat. Saya tidak setuju, tapi di sini kita. :-)

Domain-Driven Design bertujuan untuk merancang perangkat lunak dalam domain bernilai tinggi / kompleksitas tinggi.

Ini berubah menjadi pendekatan yang berbeda untuk membangun perangkat lunak perusahaan: terlalu banyak pembelajaran yang terlibat, dan konsekuensi yang paling penting adalah bahwa Anda tidak akan mendapatkan solusi yang tepat pada kesempatan pertama.

  • Karena Anda akan belajar sepanjang jalan.
  • Karena para pemangku kepentingan tidak akan mengatakan semua kebenaran dalam satu kesempatan.
  • Karena domain akan berkembang sepanjang jalan.

Atau kombinasi keduanya.

Kedua cara Anda memerlukan fondasi perangkat lunak yang baik untuk perangkat lunak yang sering ditulis ulang . Itulah alasan mengapa buku ini menekankan pada serangkaian pola tertentu di sekitar pola Model Domain: mereka adalah kombinasi paling masuk akal pada tahun 2004.

Namun, OOP dan pola taktis bukanlah hal yang paling penting. Penguasaan teknis diperlukan untuk membangun perangkat lunak yang hebat dengan cara yang evolusioner. Tapi itu hanya salah satu bahan resepnya. Yang lain?

  1. Obsesi dengan bahasa sebagai cara untuk menemukan nuansa tersembunyi.
  2. Fokus pada tampilan gambar besar untuk dapat memberikan hal-hal hebat.
  3. Kohabitasi banyak model yang lebih sederhana, bukan yang lebih besar.
  4. Penekanan pada pemodelan kolaboratif dengan para ahli domain dan di dalam tim pengembangan.
ZioBrando
sumber