5 Alat Terbaik untuk Desain Berbasis Domain

May 09 2023
Dari Sumber Acara hingga Kerangka Pengujian: Tingkatkan DDD Anda dengan 5 alat terbaik ini (dan sentuhan Bit)
Sebagai pengembang, kami sering ingin membangun sistem perangkat lunak yang selaras dengan model domain dan memenuhi persyaratan bisnis. Di situlah DDD masuk.

Sebagai pengembang, kami sering ingin membangun sistem perangkat lunak yang selaras dengan model domain dan memenuhi persyaratan bisnis. Di situlah DDD masuk.

Domain-driven design (DDD) adalah metodologi untuk mengembangkan sistem perangkat lunak yang menekankan pada penyelarasan model domain dengan implementasi. Dengan berfokus pada domain masalah dan menciptakan pemahaman bersama tentang konsep dan hubungan yang relevan, pengembang dapat membuat perangkat lunak yang mencerminkan kebutuhan pemangku kepentingan dengan lebih baik dan lebih mudah beradaptasi dengan perubahan kebutuhan bisnis.

Untuk mendukung DDD, pengembang dapat menggunakan berbagai alat dan teknologi yang membantu tugas seperti pemodelan domain, pemetaan data, dan pengujian. Pada artikel ini, kita akan menjelajahi beberapa alat dan kerangka kerja terbaik yang tersedia untuk mendukung DDD. Dari sumber peristiwa dan CQRS hingga alat pemodelan domain dan kerangka kerja ORM, kami akan membahas berbagai alat dan menyoroti manfaat utama dan kasus penggunaannya. Jadi apakah Anda baru mengenal DDD atau praktisi berpengalaman, baca terus untuk menemukan alat terbaik untuk membangun sistem perangkat lunak berbasis domain.

Apa model domainnya dan bagaimana cara menggunakannya?

Beli dulu, jika Anda baru mengenal DD, mari kita segera membahas gajah merah muda di ruangan: apa itu "model domain"?

Model domain adalah konsep sentral dalam desain berbasis domain (DDD) dan mewakili inti dari sistem perangkat lunak. Ini adalah model konseptual dari domain dunia nyata yang dimaksudkan untuk ditangani oleh sistem perangkat lunak, dan ini mendefinisikan struktur data dan perilaku sistem. Model domain adalah pemahaman bersama tentang domain masalah di antara semua pemangku kepentingan, termasuk pakar bisnis, pengembang, dan pengguna.

Model ini terdiri dari:

  • Entity, yaitu objek dengan identitas unik yang memiliki lifecycle.
  • Agregat, yang merupakan kelompok objek terkait yang membentuk batas konsistensi transaksional.
  • Objek nilai adalah objek yang tidak memiliki identitas unik dan ditentukan oleh propertinya.
  • Layanan domain adalah operasi atau algoritme yang tidak spesifik untuk entitas tunggal atau objek nilai apa pun.

Mari kita pikirkan sebuah contoh

Saya selalu suka menggunakan contoh praktis untuk memahami konsep yang rumit, jadi katakanlah kita sedang membangun platform e-niaga, dan salah satu persyaratannya adalah mengizinkan pengguna untuk memesan produk.

Dalam desain berbasis domain, kita akan mulai dengan membuat model domain yang mewakili konsep dan hubungan yang relevan dalam domain masalah.

Salah satu entitas utama dalam domain ini adalah entitas Pesanan, yang mewakili pesanan individu yang dilakukan oleh pengguna. Entitas Order akan memiliki properti seperti OrderID , CustomerID , daftar produk yang dipesan , harga total , dan status (mis. tertunda, terpenuhi, dibatalkan).

Entitas lain dalam domain ini mungkin adalah entitas Produk, yang mewakili produk yang tersedia untuk dibeli. Entitas Produk mungkin memiliki properti seperti ProductID , nama , deskripsi , gambar , harga , dan daftar kategori .

Agregat adalah kumpulan objek terkait yang membentuk batas konsistensi transaksional, jadi kami dapat membuat agregat Pesanan yang mencakup entitas Pesanan, beserta entitas terkait seperti entitas Produk dan entitas Pelanggan. Ini akan memastikan bahwa setiap perubahan pada entitas ini dilakukan dengan cara yang konsisten secara transaksional.

Kami juga dapat membuat objek nilai untuk mewakili konsep seperti alamat pengiriman dan alamat penagihan, yang tidak memiliki identitas unik tetapi ditentukan oleh propertinya.

Terakhir, kami dapat membuat layanan domain seperti ShippingService, yang akan bertanggung jawab untuk menghitung biaya pengiriman dan memperbarui entitas Pesanan dengan informasi pengiriman yang sesuai.

Secara keseluruhan, model domain ini membantu kita memahami konsep dan hubungan utama dalam domain masalah dan menyediakan landasan untuk mengimplementasikan platform e-commerce. Dengan menyelaraskan implementasi dengan model domain, kita dapat membuat sistem yang lebih fleksibel, dapat dipelihara, dan responsif terhadap perubahan kebutuhan bisnis.

Sekarang mari kita lihat beberapa alat yang mungkin membantu kita melakukannya.

Sumber Acara — Cawan Suci DDD

Event sourcing adalah teknik yang digunakan untuk mengimplementasikan konsep DDD seperti agregat, entitas, dan objek nilai. Dengan sumber kejadian, kami menyimpan semua perubahan yang dilakukan pada sistem sebagai urutan kejadian, bukan hanya menyimpan keadaan sistem saat ini. Dengan melakukan itu, kami dapat merekonstruksi status sistem kapan saja, yang sangat kuat. Ini seperti memiliki mesin waktu untuk perangkat lunak Anda!

Mari lanjutkan dengan contoh platform e-niaga kami.

Misalkan kita ingin melacak perubahan pada entitas Pesanan kita dari waktu ke waktu. Dengan sumber peristiwa, alih-alih memperbarui entitas Pesanan secara langsung, kami membuat serangkaian peristiwa yang mewakili perubahan keadaan pada Pesanan. Setiap peristiwa mewakili perubahan diskrit ke status entitas Order dan disimpan dalam log peristiwa.

Misalnya, katakanlah seorang pengguna memesan suatu produk. Alih-alih memperbarui entitas Pesanan dengan detail pesanan baru secara langsung, kami membuat acara OrderPlaced yang menyertakan OrderID, CustomerID, daftar produk yang dipesan, dan harga total. Kami kemudian menambahkan acara ini ke log peristiwa.

Kemudian, jika pengguna memperbarui pesanannya dengan menambahkan atau menghapus produk, kami membuat peristiwa OrderUpdated yang menyertakan OrderID dan daftar produk yang diperbarui, dan menambahkannya ke log peristiwa. Jika pesanan dibatalkan, kami membuat acara OrderCanceled yang menyertakan OrderID dan alasan pembatalan, dan menambahkannya ke log peristiwa.

Dengan menggunakan sumber kejadian, kami dapat membuat ulang status entitas Order kapan saja dengan memutar ulang kejadian di log kejadian. Kami juga dapat menggunakan log peristiwa untuk mengaudit perubahan pada entitas Pesanan dan untuk membuat laporan yang menampilkan riwayat pesanan.

Dengan menggunakan event sourcing untuk merekam perubahan status pada objek ini, kami dapat memastikan bahwa implementasi perangkat lunak kami tetap selaras dengan model domain.

Sebagai contoh, misalkan Order kita sebenarnya adalah agregat, yang terdiri dari satu atau lebih entitas OrderLine dan objek nilai ShippingAddress. Dengan menggunakan sumber peristiwa, kami dapat merekam setiap perubahan status ke agregat Pesanan sebagai rangkaian peristiwa, seperti OrderPlaced, OrderUpdated, dan OrderCancelled. Peristiwa ini kemudian dapat digunakan untuk membuat ulang status agregat Pesanan kapan saja, memastikan bahwa implementasi perangkat lunak kami mencerminkan model domain secara akurat.

Dengan Bit , Anda dapat membuat komponen yang mengenkapsulasi implementasi sumber peristiwa, termasuk penyimpanan peristiwa, penangan peristiwa, dan komponen relevan lainnya. Bit ini kemudian dapat dibagikan dengan tim lain, yang dapat dengan mudah menggunakannya kembali dalam proyek mereka sendiri. Dengan menggunakan Bit untuk ini, Anda dapat memastikan bahwa penerapannya konsisten di berbagai proyek dan tim. Ini bisa sangat berharga di organisasi besar dengan banyak tim pengembangan yang bekerja pada proyek yang berbeda.

CQRS — Saat Satu Ukuran Tidak Cocok untuk Semua

CQRS (Command Query Responsibility Segregation) adalah pola yang digunakan untuk memisahkan operasi baca dan tulis dalam suatu sistem. Dalam arsitektur tradisional, kami memiliki satu model yang menangani baca dan tulis, yang dapat menyebabkan masalah kinerja dan masalah skalabilitas. CQRS memecahkan masalah ini dengan memisahkan model baca dan tulis, memungkinkan kami untuk mengoptimalkan setiap model secara mandiri.

Untuk mendukung CQRS, ada beberapa framework yang tersedia. Salah satu framework tersebut adalah NestJS. NestJS mencapai CQRS dengan menggunakan event bus bawaannya, yang memungkinkan Anda memublikasikan dan berlangganan acara di berbagai bagian aplikasi Anda. Hal ini memudahkan penerapan penangan perintah yang menulis ke database aplikasi Anda, serta penangan kueri yang mengambil data dari database dan mengembalikannya ke klien.

Dengan memisahkan kedua tanggung jawab ini, Anda dapat memastikan bahwa aplikasi Anda lebih berkinerja, lebih mudah diuji, dan lebih tahan terhadap perubahan

Menggunakan NestJS dengan Bit dapat semakin meningkatkan kemampuan Anda untuk mengembangkan aplikasi DDD. Bit menyediakan cara untuk berbagi dan menggunakan kembali komponen kode di berbagai proyek ( baca artikel ini untuk mengetahui lebih lanjut tentang ini), memungkinkan tim untuk berkolaborasi secara lebih efektif dan menghindari upaya duplikasi. Dengan membuat pustaka bersama komponen NestJS, seperti penangan perintah dan kueri, Anda dapat mengurangi jumlah kode yang perlu ditulis dan dipelihara di seluruh portofolio aplikasi Anda. Selain itu, Bit memungkinkan Anda membuat versi dan melacak perubahan pada komponen Anda dari waktu ke waktu, membuatnya lebih mudah untuk mengelola dependensi dan memastikan kompatibilitas di seluruh aplikasi Anda.

Alat Pemodelan Domain — Visualisasikan Model Domain Anda

Ah, alat pemodelan domain. Jika Anda menyukai desain berbasis domain (DDD), Anda mungkin sudah tidak asing lagi dengan mereka. Jika tidak, jangan khawatir — saya di sini untuk membantu Anda mempercepat.

Jadi, apa itu alat pemodelan domain? Singkatnya, mereka adalah aplikasi perangkat lunak yang membantu pengembang membuat dan memvisualisasikan model domain dari sistem perangkat lunak mereka. Model domain adalah representasi dari konsep dan hubungan dunia nyata yang dirancang untuk dimodelkan oleh sistem perangkat lunak. Ini adalah bagian penting dari DDD, yang menekankan pentingnya pemahaman yang jelas, ringkas, dan bersama tentang model domain di antara semua pemangku kepentingan.

Ada berbagai alat pemodelan domain yang tersedia yang dapat membantu Anda membuat dan memvisualisasikan model domain untuk sistem perangkat lunak Anda. Alat ini dapat sangat berguna saat bekerja dengan pakar domain dan anggota tim lainnya untuk memastikan bahwa model domain akurat dan dipahami dengan baik.

Salah satu contoh alat tersebut adalah PlantUML , yang merupakan alat diagram berbasis teks yang memungkinkan Anda membuat diagram UML, termasuk diagram kelas, diagram urutan, diagram use case, dan lainnya, menggunakan sintaksis sederhana. PlantUML adalah sumber terbuka dan mendukung berbagai format keluaran, termasuk PNG, SVG, dan PDF. Itu dapat diintegrasikan dengan berbagai editor dan IDE, termasuk Visual Studio Code, melalui ekstensi atau plugin.

Alat populer lainnya adalah Lucidchart , yang merupakan alat diagram berbasis web yang memungkinkan Anda membuat berbagai jenis diagram, termasuk diagram alur, diagram UML, diagram ER, dan lainnya, menggunakan antarmuka drag-and-drop. Lucidchart menawarkan berbagai template dan bentuk, membuatnya mudah untuk membuat diagram yang tampak profesional dengan cepat.

Selain itu, beberapa editor kode dan IDE, seperti IntelliJ IDEA, menyediakan dukungan bawaan untuk diagram UML dan alat pemodelan visual lainnya, yang berguna saat bekerja pada sistem perangkat lunak yang memiliki model domain kompleks.

Secara keseluruhan, alat pemodelan domain dapat menjadi aset berharga saat bekerja pada sistem perangkat lunak yang melibatkan model domain yang kompleks. Mereka dapat membantu Anda membuat, memvisualisasikan, dan mengomunikasikan model domain secara efektif dengan anggota tim lainnya, membuatnya lebih mudah untuk membangun sistem perangkat lunak yang selaras dengan kebutuhan bisnis.

Kerangka kerja ORM (Object-Relational Mapping).

Salah satu tantangan utama penerapan DDD adalah memetakan objek ke database relasional. Di sinilah kerangka kerja ORM berguna. Framework ORM menyediakan cara untuk memetakan objek ke tabel dalam database relasional. Ini memungkinkan Anda untuk bekerja dengan objek dalam kode Anda, sementara kerangka kerja menangani interaksi basis data.

Ada banyak kerangka ORM umum untuk semua bahasa. Untuk ekosistem JavaScript, karena tidak ada cara lain, Anda memiliki banyak pilihan. Konon, beberapa opsi yang paling populer adalah Sequelize dan Prisma . Kerangka kerja ini menyediakan cara untuk memetakan objek ke tabel dalam database, dan mereka juga menyediakan cara untuk membuat kueri database menggunakan sintaks berorientasi objek.

Salah satu keuntungan menggunakan framework ORM adalah mereka mengurangi jumlah kode boilerplate yang harus Anda tulis. Mereka juga memudahkan untuk mengubah skema basis data yang mendasarinya tanpa harus mengubah kode Anda.

Namun, kerangka kerja ORM juga dapat memperkenalkan beberapa overhead kinerja dan menyulitkan untuk melakukan kueri kompleks (seperti JOIN kompleks dan sub-kueri), jadi penting untuk memilih kerangka kerja yang tepat untuk aplikasi Anda.

Di atas semua manfaat yang ditambahkan ORM, Bit menambahkan lebih banyak lagi nilai dengan membiarkan Anda menggunakan kembali model data dan kode generik di berbagai proyek yang berbagi struktur data dengan mudah. Misalnya, Anda dapat membuat komponen ORM yang menentukan model data tertentu, lalu menggunakannya kembali di berbagai bagian aplikasi Anda. Ini dapat menghemat waktu dan tenaga Anda karena Anda tidak perlu menulis kode yang sama berkali-kali. Selain itu, karena Bit memungkinkan Anda mengelola dan membuat versi komponen dengan mudah, Anda dapat memastikan bahwa semua komponen Anda mutakhir dan sesuai dengan versi struktur data Anda saat ini.

Apakah Anda menyukai apa yang Anda baca? Pertimbangkan untuk berlangganan buletin GRATIS saya di mana saya membagikan kebijaksanaan saya selama 2 dekade dalam industri TI dengan semua orang. Bergabunglah dengan “ The Rambling of an old developer ”!

Kerangka pengujian

Saat melakukan pengujian dalam Domain-Driven Design (DDD), penting untuk memastikan bahwa model domain Anda sudah benar dan berfungsi seperti yang diharapkan. Di sinilah kerangka pengujian masuk. Pengujian Anda entah bagaimana harus menjelaskan model domain untuk memastikan bahwa logika akhir perangkat lunak Anda memenuhi harapan.

Ada banyak kerangka pengujian yang tersedia untuk JavaScript, masing-masing dengan kekuatan dan kelemahannya sendiri.

Dua kerangka pengujian yang sangat populer untuk JavaScript adalah Jest dan Mocha.

Jest adalah framework pengujian JavaScript yang dibuat oleh Facebook. Ini menyediakan API pengujian yang sederhana dan intuitif, membuatnya mudah untuk menulis pengujian untuk kode JavaScript Anda. Jest juga menyediakan fitur seperti mocking dan pengujian snapshot, yang dapat membantu Anda menulis pengujian yang lebih efisien dan efektif.

Mocha adalah kerangka kerja pengujian JavaScript yang memungkinkan Anda menulis pengujian dengan gaya apa pun yang Anda suka. Ini menyediakan API fleksibel yang dapat digunakan untuk menguji kode sinkron dan asinkron. Mocha juga mendukung berbagai format pelaporan, membuatnya mudah diintegrasikan dengan alat lain dalam alur kerja pengujian Anda.

Menggunakan kerangka pengujian seperti Jest atau Mocha dapat membantu Anda menangkap bug dan memastikan bahwa model domain Anda berfungsi seperti yang diharapkan. Namun, menyiapkan pengujian dan memastikan Anda selalu menjalankannya dapat memakan waktu dan membosankan. Di sinilah Bit dapat membantu.

Bit secara otomatis membuat template pengujian untuk setiap komponen yang Anda buat. Tidak hanya itu, langkah pengujian adalah wajib dalam semua proses utamanya (seperti penandaan dan pembuatan komponen), jadi meskipun Anda tidak mau, Anda harus menulis pengujian untuk memastikan komponen dapat didorong dan dibagikan dengan pengembang lain. Di atas semua itu, pengaturan Jest (atau kerangka pengujian yang Anda inginkan) dilakukan secara otomatis oleh Bit, jadi Anda juga tidak perlu khawatir tentang langkah itu.

Kesimpulannya, menggunakan kerangka pengujian sangat penting saat mengembangkan aplikasi menggunakan prinsip Domain-Driven Design (DDD). Jest dan Mocha adalah pilihan populer untuk menguji aplikasi JavaScript, dan menggunakan Bit dapat membantu Anda merampingkan proses pengujian. Ini dapat menghemat waktu dan tenaga Anda serta memastikan bahwa pengujian Anda mutakhir dan bekerja dengan benar.

Singkatnya, Domain-driven design (DDD) adalah metodologi yang kuat untuk mengembangkan sistem perangkat lunak yang berfokus pada menyelaraskan model domain dengan implementasinya. Untuk mendukung DDD, Anda dapat menggunakan berbagai alat dan teknologi, termasuk sumber kejadian, CQRS, alat pemodelan domain, kerangka kerja ORM, dan kerangka kerja pengujian.

Selain itu, Bit memungkinkan tim untuk membuat dan berbagi komponen yang merangkum fungsionalitas bisnis tertentu, yang sangat penting untuk membangun dan memelihara aplikasi kompleks yang bergantung pada DDD. Komponen dapat digunakan untuk membangun model domain, mengintegrasikan dengan database, dan menjalankan logika bisnis yang kompleks.

Jadi, apakah Anda baru memulai dengan DDD atau Anda seorang profesional berpengalaman, alat dan teknologi ini dapat membantu Anda membangun aplikasi perangkat lunak yang lebih baik yang selaras dengan kebutuhan bisnis Anda.

Jadi silakan, cobalah, dan lihat apa yang terbaik untuk Anda!

Belajarlah lagi