Saya melihat istilah ini banyak dalam konteks arsitektur perangkat lunak ("domain-model", "domain-driven-design" dll.). Saya sudah mencarinya di Google, tetapi saya mendapatkan banyak definisi berbeda. Jadi apa itu sebenarnya?
Saya melihat istilah ini banyak dalam konteks arsitektur perangkat lunak ("domain-model", "domain-driven-design" dll.). Saya sudah mencarinya di Google, tetapi saya mendapatkan banyak definisi berbeda. Jadi apa itu sebenarnya?
Jawaban:
Kata "domain" dalam buku Domain Driven Design karya Eric Evans memiliki makna khusus. Ini tentang perangkat lunak.
Evans melangkah lebih jauh. Dalam pandangannya ada sub domain bahkan dengan perangkat lunak yang sama. Dan ini adalah bagian dari buku yang berhubungan dengan "Desain Strategis".
Ada tiga "domain": domain inti, domain pendukung, dan domain generik. Terkadang dia menyebut ini sebagai sub-domain.
Evans juga sangat peduli tentang bisnis aktual di balik perangkat lunak dan buku ini tidak hanya ditargetkan pada pengembang, tetapi juga arsitek dan manajer yang perlu melihat bagaimana perangkat lunak dan bisnis dapat bekerja sama, dan itulah yang menjadi perhatiannya ketika membahas desain strategis dan sub domain ini.
Jadi, domain inti adalah bagian dari perangkat lunak yang mewakili keunggulan kompetitif dan "raison d'etre" dari perangkat lunak. Itu adalah bagian dari perangkat lunak itu sebabnya pelanggan akan membeli perangkat lunak vs beberapa perangkat lunak lain. Biasanya, Evans melihatnya sebagai domain yang berisi persentase kode terkecil. Anda dapat menganggapnya sebagai 20% yang paling penting. Ini adalah bagian yang Anda tidak dapat benar-benar membeli dari rak dan mungkin hanya satu modul atau komponen dari keseluruhan perangkat lunak.
Domain pendukung masih penting dan bisa unik bagi organisasi tetapi tidak sepenting domain inti. Tanpa itu, perangkat lunak tidak akan begitu berharga dan inti bergantung padanya. Ini bisa berupa beberapa modul dalam perangkat lunak yang telah Anda tulis sendiri dan yang menjalankan fungsi penting namun mendukung inti.
Domain generik adalah yang paling tidak tersesuaikan dan dalam beberapa hal bagian terpenting dari perangkat lunak. Anda mungkin telah menulisnya sendiri tetapi mungkin lebih efisien untuk membelinya di rak atau menggunakan perangkat lunak open source yang terkenal. Bagian dari sistem ini mungkin tidak spesifik untuk domain keseluruhan Anda, jadi misalnya apakah Anda memiliki sistem pengiriman yang merutekan paket atau sistem catatan kesehatan yang mengelola pasien, domain generik adalah bagian dari sistem ini yang umum dan hanya hanya perlu ada di sana untuk berfungsi sama sekali. Ini mungkin merupakan bagian terbesar dari sistem secara keseluruhan, tetapi belum tentu demikian.
Dari perspektif bisnis, penting untuk memutuskan apa domain inti Anda dan memfokuskan sumber daya pengembangan Anda di sana. Evans memiliki banyak video, terutama di situs InfoQ, di mana ia menjelaskan konsep-konsep ini secara lebih rinci.
Jadi sementara kita sering berbicara tentang "domain" dalam perangkat lunak, dalam kasus DDD, itu tidak sesederhana kelihatannya.
Saya harus mencatat bahwa konsep-konsep DDD belum tentu ada dalam komunitas perangkat lunak yang lebih luas. Pengembang, penulis, dan orang-orang produk lainnya mungkin memiliki gagasan dan definisi yang berbeda, beberapa lebih halus dan beberapa kurang. Bahkan penulis lain yang telah menulis tentang DDD mungkin mengabaikan konsep-konsep ini dalam buku Evans, tetapi saya merasa bahwa konsep-konsep itu masih berguna ketika menulis dan merencanakan proyek perangkat lunak.
The domain adalah konteks dunia nyata di mana Anda mencoba untuk memecahkan masalah dengan menggunakan perangkat lunak. Setiap domain dilengkapi dengan keahlian, kosa kata dan alat yang merupakan bagian dari domain itu.
Contoh spesifik domain dapat berupa "permesinan otomatis bagian rumit menggunakan pemotong berputar kecepatan tinggi." Perangkat lunak dan sistem perangkat keras yang melakukan ini disebut pabrik CNC .
Contoh lain dari domain adalah departemen akuntansi di sebuah perusahaan.
Bacaan Lebih Lanjut
Konteks Terbatas oleh Martin Fowler
Ini berarti ruang masalah tempat Anda bekerja. Misalnya, jika Anda membangun situs web e-commerce, domain Anda akan menjadi "e-commerce" dan akan melibatkan proses yang terkait dengan praktik penjualan klien / perusahaan Anda. Jadi model domain akan menjadi sesuatu untuk mewakili suatu produk atau faktur atau catatan pengiriman.
domain names
juga dikenal sebagai domain, saya pikir Anda harus menjelaskan bagaimana Anda menggunakan kata domain di sini.
Sebuah Domain adalah daerah pengetahuan. Ini bisa dianggap sebagai kegiatan di mana masalah dipecahkan oleh perangkat lunak Anda. ( Wiki , Komunitas DDD )
Eric Evans dalam bukunya, menggunakan pengiriman kargo untuk menjelaskan apa itu DDD. Dalam contohnya, domain adalah segalanya tentang pengiriman . Bagaimana kargo dipindahkan, dikelola, dikirim dan dilacak dll. Ia dilengkapi dengan aturan, bahasa, dan proses spesifiknya sendiri. Mereka akan membuat model domain, objek, layanan, dan sebagainya.
Ketika Anda membuat aplikasi, Anda akan memiliki semacam otorisasi, seperti dunia pengiriman yang sebenarnya, tidak semua orang dapat mengakses gudang. Bagaimana pengguna diotorisasi dan bagaimana izin diberikan dapat berada di luar domain , karena informasi tersebut mungkin tidak relevan dengan pengiriman barang.
Sederhananya: domain adalah tempat Anda berbisnis . Jika bisnis Anda mengirim kargo - kargo pengiriman akan menjadi domain Anda. Jika bisnis Anda dalam mengautentikasi dan mengesahkan personel maka ini akan menjadi domain Anda.
Dari Desain Berbasis Domain: Mengatasi Kompleksitas di Jantung Perangkat Lunak , Eric Evans:
Setiap program perangkat lunak berkaitan dengan beberapa aktivitas atau minat penggunanya. Area subjek tempat pengguna menerapkan program adalah domain perangkat lunak.
Domain program pemesanan penerbangan melibatkan orang sungguhan yang naik pesawat sungguhan.
Domain dari program akuntansi adalah uang dan keuangan.
Domain dari sistem kontrol kode sumber adalah pengembangan perangkat lunak itu sendiri.
Model domain, kemudian adalah "abstraksi ketat terorganisir dan selektif" pengetahuan di kepala pakar domain.
Palermo, dalam menggambarkan arsitektur bawang, menawarkan ringkasan ini
Di tengah-tengah kita melihat Model Domain, yang mewakili kombinasi keadaan dan perilaku yang memodelkan kebenaran bagi organisasi.
Fowler, pada gilirannya, menawarkan
Model objek domain yang menggabungkan perilaku dan data.
Jika Anda melihat definisi yang lebih baru, Anda lebih mungkin menemukan referensi bahwa model domain dan model data berbeda . Saya tidak menganggap bahwa perubahan makna begitu banyak sebagai perubahan penekanan - memodelkan perilaku (cara data berubah sebagai respons terhadap informasi dari luar model) memiliki kompleksitas dan variasi yang lebih kaya daripada berbagai cara penulisan berbagai hal. .
Karena Anda mungkin sudah memiliki gagasan tentang apa itu domain, saya kira langkah selanjutnya yang akan Anda ambil adalah mencoba mendefinisikan sub-domain, model domain dan, yang lebih penting, konteks yang dibatasi.
Saya mulai dengan menempatkan perspektif domain saya.
Domain adalah realitas yang kita huni: entitasnya, perilaku mereka, hukum yang mereka patuhi. Itu ada sebelum kita dan akan ada setelah kita, dalam satu atau lain bentuk. Keberadaannya tidak tergantung pada kesadaran kita. Pemasar datang dengan fitur-fitur baru dan melakukan analisis pasar, manajer akun utama berkomunikasi dengan klien, pengembang perangkat lunak mengotomatisasikan proses bisnis. Itu sebabnya domain disebut ruang Masalah.
DDD mengimplikasikan dekomposisi domain ke dalam sub-domain, untuk memudahkan pemodelan dan pemahamannya. Fakta bahwa Anda menjalankan bisnis menyimpulkan bahwa setidaknya ada satu nilai bisnis yang dominan. Yang Anda hasilkan uang. Yang kami mulai untuk bisnis kami. Jadi, bahkan jika Anda tidak tahu kata seperti itu seperti "Core domain", itu masih ada. Hal yang sama berlaku untuk sub-domain: mungkin Anda akan membutuhkan pembukuan, sumber daya manusia, dukungan teknis - tetapi ini adalah sekunder.
Tidak perlu memodelkan sub-domain yang diekstraksi secara keseluruhan. Ada seperangkat aturan tertentu di setiap sub-domain yang kami minati. Aturan yang ditetapkan dalam beberapa sub-domain yang diperlukan untuk mencapai hasil bisnis tertentu disebut model.
Yang paling penting adalah konteks terikat adalah batasan logis.
Ketika kedua sub-domain dan domain inti didefinisikan, saatnya untuk mengimplementasikan kode. Konteks terikat mendefinisikan batas-batas nyata penerapan beberapa sub-domain. Ini adalah area di mana sub-domain tertentu masuk akal, sementara yang lain tidak. Ini dapat berupa ceramah, presentasi, proyek kode dengan batas fisik yang ditentukan oleh artefak.
Jika Anda tertarik pada bagaimana konsep konteks terbatas berkorelasi dengan konsep subdomain, cara menentukan subdomain dan konteks terbatas, cara merepresentasikan komunikasi mereka satu sama lain dan bagaimana mengatur tim dengan konsep-konsep ini dalam pikiran, mungkin Anda akan tertarik dengan ini bacaan lebih lanjut .