Pengorganisasian (Perintah, Acara & Penangan) di Layanan Mikro

Dalam arsitektur berbasis pesan seperti SOA atau Microservices, mengatur perintah dan acara, bersama dengan penangannya yang dihormati, dapat berdampak besar jika Anda menavigasi basis kode Anda. Anda mungkin terkejut dengan perkembangan cara saya mengaturnya pada awalnya menjadi apa yang saya lakukan sekarang! Juga tip tentang bagaimana memberi nama perintah dan Acara daripada setelah CRUD.

Youtube

Lihat saluran YouTube saya tempat saya memposting semua jenis konten yang menyertai posting saya termasuk video ini yang menunjukkan semua yang ada di posting ini.

Blok bangunan

Saat pindah ke sistem yang digerakkan oleh pesan, Anda kemungkinan akan jatuh ke jalur pembuatan tindakan yang sangat eksplisit untuk sistem Anda daripada CRUD. Ketika Anda melakukan ini, Anda akan menemukan diri Anda mengikuti CQRS dan kemungkinan juga pindah ke arsitektur yang digerakkan oleh peristiwa (yang masuk akal).

Blok penyusun adalah pesan dan penangan pesan. Pesan dapat berupa Perintah, Kueri, dan Peristiwa. Perintah dan Kueri akan memiliki satu penangan yang menggunakan pesan tersebut. Acara dapat memiliki nol atau banyak penangan yang menggunakannya.

Mengatur perintah dan acara (dan penangannya) bisa menjadi sedikit pesan saat Anda pertama kali memulai. Saya sering ditanya di saluran saya bagaimana saya mengatur blok bangunan pesan dan penangan ini. Begini perkembangan saya dari waktu ke waktu.

Atur berdasarkan Folder Fitur

Letakkan semua pesan dan penangan yang relevan di folder yang sama. Ini mungkin pendekatan paling umum atau intuitif yang mungkin Anda mulai saat beralih ke sistem berbasis pesan. Menempatkan semua jenis yang relevan ke dalam file mereka sendiri dalam satu folder.

Saya sering menaruhnya di dalam folder bernama fitur. Ini karena saya melihat satu atau kumpulan pesan dan penangan sebagai fitur individu. Misalnya, mengatur pesanan sebagai Siap di kirim kan adalah perintah, tetapi juga terjadi saat ShippingCreatedEvent terjadi.

File Tunggal dengan Sufiks

Bagi saya, langkah selanjutnya dalam perjalanan organisasi adalah memasukkan semua jenis yang relevan ke dalam satu file. Khusus untuk perintah dan kueri, yang hanya ada satu penangan. Bagi saya, ini menyederhanakan tidak harus melompati file karena perintah / kueri dan penangan terkait langsung satu sama lain. Mengapa repot-repot dengan dua file?

Contoh berikut berisi Controller, Command, Handler, dan Saga. Segala sesuatu yang berhubungan dengan fitur PlaceOrder terletak di file ini.

Acara

Dalam contoh di atas, ada file OrderPlaced acara yang dipublikasikan. Namun, itu tidak ditentukan dalam file ini. Ini karena acara ini dikonsumsi dan dibagi dengan batas / layanan lain. Karena alasan itu, saya memasukkan pesan bersama ke dalam proyek Kontrak yang dibagikan dengan layanan lain.

Kelas Pembungkus Statis

Perkembangan saya selanjutnya dalam pengorganisasian adalah saya tidak suka memiliki nama yang berlebihan untuk Command / Handler / Event. Dalam contoh di atas untuk file PlaceOrder fitur, ada a PlaceOrderCommand dan PlaceOrderHandler. Saya menemukan penamaan itu agak mubazir dan melelahkan untuk mengetik.

Untuk mengatasi ini, saya cukup menempatkan tipe di dalam kelas statis. Kelas statis adalah nama fitur tersebut.

Dalam contoh berikut, fitur tersebut Batalkan pesanan berisi kelas statis bernama itu, dan bersarang di dalamnya adalah Command dan Handler. Saat membuat contoh baru dari sebuah perintah: CancelOrder.Command baru ()

Suffix & Consistency

Saya cenderung tidak mencampurkan acara dengan “Acara”. Oleh karena itu mengapa Anda melihat OrderPlaced dan OrderCancelled dan tidak OrderPlacedEvent atau OrderCancelledEvent. Ini adalah masalah preferensi karena peristiwa selalu dinamai dalam bentuk lampau.

Pada akhirnya, itu adalah preferensi Anda. Rekomendasi saya pada akhirnya adalah konsisten dalam penamaan Anda. Terlepas dari bagaimana Anda mengatur atau memberi nama, tetaplah konsisten karena itu akan membuat navigasi basis kode Anda jauh lebih mudah.

Kode sumber

Anggota tingkat pengembang saluran YouTube CodeOpinion saya mendapatkan akses ke sumber lengkap untuk aplikasi demo yang berfungsi yang tersedia dalam git repo. Lihat keanggotaan untuk info lebih lanjut.

Posting Terkait Tambahan

Ikuti @CodeOpinion di Twitter