Mengatasi Kompleksitas Bisnis dalam Layanan Mikro dengan Pola DDD dan CQRS
Tip
Konten ini adalah kutipan dari eBook berjudul “.NET Microservices Architecture for Containerized .NET Applications” yang tersedia di .NET Docs atau sebagai PDF yang dapat diunduh gratis dan dapat dibaca secara luring.
Merancang model domain untuk setiap layanan mikro atau Konteks Terikat yang mencerminkan pemahaman tentang domain bisnis.
Bagian ini berfokus pada layanan mikro yang lebih canggih yang Anda terapkan saat Anda perlu mengatasi subsistem kompleks, atau layanan mikro yang berasal dari pengetahuan pakar domain dengan aturan bisnis yang terus berubah. Pola arsitektur yang digunakan di bagian ini didasarkan pada pendekatan desain berbasis domain (DDD) dan Pemisahan Tanggung Jawab Perintah dan Kueri (CQRS), seperti yang digambarkan dalam Gambar 7-1.
Perbedaan antara arsitektur eksternal: pola layanan mikro, gateway API, komunikasi tangguh, pub/sub, dll., dan arsitektur internal: berbasis data/CRUD, pola DDD, injeksi dependensi, beberapa pustaka, dll.
Gambar 7-1. Arsitektur layanan mikro eksternal versus pola arsitektur internal untuk setiap layanan mikro
Meskipun demikian, sebagian besar teknik untuk layanan mikro berbasis data, seperti cara mengimplementasikan layanan ASP.NET Core Web API atau cara mengekspos metadata Swagger dengan Swashbuckle atau NSwag, juga berlaku untuk layanan mikro yang lebih canggih yang diterapkan secara internal dengan pola DDD. Bagian ini adalah perpanjangan dari bagian sebelumnya, karena sebagian besar praktik yang dijelaskan sebelumnya juga berlaku di sini atau untuk segala jenis layanan mikro.
Bagian ini, pertama-tama, memberikan detail tentang pola CQRS yang disederhanakan yang digunakan dalam aplikasi referensi eShopOnContainers. Nantinya, Anda akan mendapatkan gambaran umum tentang teknik DDD yang memungkinkan Anda menemukan pola umum yang bisa Anda gunakan kembali dalam aplikasi Anda.
DDD adalah topik besar dengan sekumpulan sumber daya yang kaya untuk belajar. Anda dapat memulai dengan buku-buku seperti Domain-Driven Design oleh Eric Evans dan materi tambahan dari Vaughn Vernon, Jimmy Nilsson, Greg Young, Udi Dahan, Jimmy Bogard, dan banyak pakar DDD/CQRS lainnya. Tetapi yang terpenting, Anda perlu mencoba mempelajari cara menerapkan teknik DDD dari percakapan, papan tulis, dan sesi pemodelan domain dengan para ahli di domain bisnis konkret Anda.
Sumber Daya Tambahan:
DDD (Domain-Driven Design/Desain Berbasis Domain)
Eric Evans. Bahasa Domain
https://domainlanguage.com/Martin Fowler. Desain Berbasis Domain
https://martinfowler.com/tags/domain%20driven%20design.htmlJimmy Bogard. Memperkuat domain Anda: primer
https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-domain-a-primer/
Buku DDD
Eric Evans. Desan Berbasis Domain: Mengatasi Kompleksitas di Pusat Perangkat Lunak
https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/Eric Evans. Referensi Desain Berbasis Domain: Definisi dan Ringkasan Pola
https://www.amazon.com/Domain-Driven-Design-Reference-Definitions-2014-09-22/dp/B01N8YB4ZO/Vaughn Vernon. Menerapkan Desain Berbasis Domain
https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/Vaughn Vernon. Distilasi Desain Berbasis Domain
https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/Jimmy Nilsson. Menerapkan Desain dan Pola Berbasis Domain
https://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/Cesar de la Torre. Panduan Arsitektur Berorientasi Domain Berlapis N dengan .NET
https://www.amazon.com/N-Layered-Domain-Oriented-Architecture-Guide-NET/dp/8493903612/Abel Avram dan Floyd Marinescu. Desain Berbasis Domain Dengan Cepat
https://www.amazon.com/Domain-Driven-Design-Quickly-Abel-Avram/dp/1411609255/Scott Millett, Nick Tune - Pola, Prinsip, dan Praktik Desain Berbasis Domain
https://www.wiley.com/Patterns%2C+Principles%2C+and+Practices+of+Domain+Driven+Design-p-9781118714706
Pelatihan DDD
- Julie Lerman dan Steve Smith. Dasar-Dasar Desain Berbasis Domain
https://bit.ly/PS-DDD