Anda sedang membangun sistem yang melacak Perusahaan. Perusahaan-perusahaan itu memiliki Kontak. Kontak tersebut seringkali merupakan spesialis yang hanya menjawab jenis pertanyaan tertentu, seperti Penagihan / Pembayaran, Penjualan, Pemesanan, dan Dukungan Pelanggan.
Menggunakan Desain Berbasis Domain dan Arsitektur Bawang, saya telah memodelkan ini dengan tipe berikut:
- Perusahaan
- Memiliki Kontak
- Kontak
- Memiliki Jenis Kontak
- Jenis Kontak (enum)
- CompanyRepository (antarmuka)
- EFCompanyRepository (didefinisikan dalam rakitan eksternal, menggunakan EntityFramework, mengimplementasikan CompanyRepository)
Tim kami memiliki pendapat berbeda tentang cara memodelkan basis data untuk aplikasi ini.
Sisi A: The DDDers Lean:
- Tugas Domain adalah menentukan ContactTypes mana yang valid untuk Kontak. Menambahkan tabel ke database untuk memvalidasi bahwa ContactTypes yang tidak diketahui tidak disimpan adalah tanda domain bocor. Ini menyebarkan logika terlalu jauh.
- Menambahkan tabel statis ke database dan kode yang sesuai boros. Dalam aplikasi ini database memecahkan satu masalah: tetap ada dan berikan kembali kepada saya. Menulis tabel tambahan dan kode CRUD yang sesuai adalah pemborosan.
- Mengubah strategi untuk kegigihan semudah mungkin. Lebih mungkin untuk mengubah aturan bisnis itu. Jika saya memutuskan bahwa biaya SQL Server terlalu banyak saya tidak ingin harus membangun kembali semua validasi yang saya masukkan ke dalam skema saya.
Sisi B: Kaum Tradisionalis [itu mungkin bukan nama yang adil. The DBCentrists?]:
- Itu ide yang buruk untuk memiliki data dalam database yang tidak masuk akal tanpa membaca kode. Laporan dan konsumen lain harus mengulang daftar nilai itu sendiri.
- Bukan kode yang banyak untuk memuat kamus jenis db Anda sesuai permintaan. Jangan khawatir tentang itu.
- Jika sumber ini adalah kode dan bukan data saya harus menggunakan bit, bukan skrip SQL sederhana ketika itu berubah.
Tidak ada pihak yang benar atau salah, tetapi salah satu dari mereka mungkin lebih efisien dalam jangka panjang, menghitung waktu pengembangan untuk pengembangan awal, bug, dll. Sisi mana itu - atau apakah ada kompromi yang lebih baik? Apa yang dilakukan oleh tim lain yang menulis gaya kode ini?