# 08: REFERENSI, KODE SNIPPET, DAN GLOSARIUM LENGKAP DDD **Buku:** Domain-Driven Design Distilled **Penulis:** Vaughn Vernon **Penerjemah:** Everest ERP Architecture Team --- ## 💻 Kumpulan Kode Snippet & Skenario Lengkap ### 1. Skenario Eksekutabel BDD (Given / When / Then) ```gherkin Scenario: The product owner commits a backlog item to a sprint Given a backlog item that is scheduled for release And the product owner of the backlog item And a sprint for commitment And a quorum of team approval for commitment When the product owner commits the backlog item to the sprint Then the backlog item is committed to the sprint And the backlog item committed event is created ``` ### 2. Pengujian Unit Penerimaan Lengkap (C# / OOP) ```csharp /* The product owner commits a backlog item to a sprint. The backlog item may be committed only if it is already scheduled for release, and if a quorum of team members have approved commitment. When the commitment completes, notify the sprint to which it is now committed. */ [Test] public void ShouldCommitBacklogItemToSprint() { // Given var backlogItem = BacklogItemScheduledForRelease(); var productOwner = ProductOwnerOf(backlogItem); var sprint = SprintForCommitment(); var quorum = QuorumOfTeamApproval(backlogItem, sprint); // When backlogItem.CommitTo(sprint, productOwner, quorum); // Then Assert.IsTrue(backlogItem.IsCommitted()); var backlogItemCommitted = backlogItem.Events.OfType().SingleOrDefault(); Assert.IsNotNull(backlogItemCommitted); } ``` ### 3. Struktur Dasar Model Aggregate Root & Value Object ```csharp public class Product : Entity { private TenantId tenantId; private ProductId productId; private string name; private string description; // Behavioral Methods (Perilaku Bisnis yang Menghindari Anemia Model) public void PlanBacklogItem(string summary, string story) { } public void PlannedProductBacklogItem(...) { } public void ScheduleRelease(string name, DateTime date) { } public void ScheduleSprint(string name, DateTime start, DateTime end) { } } ``` --- ## 📚 Referensi Buku & Literatur Ilmiah yang Dirujuk 1. **[BDD]** North, Dan. *"Behavior-Driven Development."* 2006. 2. **[Causal]** Lloyd, Wyatt; Freedman, Michael J.; Kaminsky, Michael; Andersen, David G. *"Don’t Settle for Eventual Consistency: Stronger Properties for Low-Latency Geo-replicated Storage."* ACM Queue, 2013. 3. **[DDD]** Evans, Eric. *"Domain-Driven Design: Tackling Complexity in the Heart of Software."* Addison-Wesley, Boston, 2004. 4. **[Essential Scrum]** Rubin, Kenneth S. *"Essential Scrum: A Practical Guide to the Most Popular Agile Process."* Addison-Wesley, Boston, 2012. 5. **[IDDD]** Vernon, Vaughn. *"Implementing Domain-Driven Design."* Addison-Wesley, Boston, 2013. 6. **[Impact Mapping]** Adzic, Gojko. *"Impact Mapping: Making a Big Impact with Software Products and Projects."* Provoking Thoughts, 2012. 7. **[Microservices]** Newman, Sam. *"Building Microservices."* O’Reilly Media, Sebastopol, CA, 2015. 8. **[Reactive]** Vernon, Vaughn. *"Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka."* Addison-Wesley, Boston, 2015. 9. **[RiP]** Webber, Jim; Parastatidis, Savas; Robinson, Ian. *"REST in Practice: Hypermedia and Systems Architecture."* O’Reilly Media, 2010. 10. **[Specification]** Adzic, Gojko. *"Specification by Example: How Successful Teams Deliver the Right Software."* Manning Publications, 2011. 11. **[User Story Mapping]** Patton, Jeff. *"User Story Mapping: Discover the Whole Story, Build the Right Product."* O’Reilly Media, 2014. 12. **[EventStorming]** Brandolini, Alberto. *"Introducing EventStorming."* Leanpub, 2015. --- ## 📖 Glosarium Komprehensif Istilah DDD | Istilah Bahasa Inggris | Terjemahan Bahasa Indonesia | Definisi Lengkap | |---|---|---| | **Bounded Context** | Batas Konteks Semantik | Batasan eksplisit di mana suatu model perangkat lunak dan istilah bahasa bisnis memiliki arti tunggal yang pasti. | | **Ubiquitous Language** | Bahasa Baku Bersama | Bahasa ketat yang disepakati dan diucapkan bersama oleh seluruh anggota tim dan diimplementasikan langsung di dalam kode. | | **Core Domain** | Domain Inti Strategis | Model domain yang menjadi inisiatif strategis utama dan keunggulan pembeda perusahaan di pasar. | | **Supporting Subdomain** | Subdomain Pendukung | Model domain pendukung yang dibuat kustom karena tidak ada software jadi, namun bukan pembeda kompetitif utama. | | **Generic Subdomain** | Subdomain Generik | Fungsionalitas standar/komoditas yang dapat dibeli atau dialihdayakan. | | **Aggregate** | Agregat | Kelompok Entitas dan Value Object yang membentuk satu batasan konsistensi transaksional atomik. | | **Aggregate Root** | Akar / Induk Agregat | Entitas utama pengendali gerbang seluruh akses dan mutasi data di dalam Agregat. | | **Value Object** | Objek Nilai | Objek tanpa identitas unik yang bersifat kekal (*immutable*) dan diidentifikasi dari keseluruhan atributnya. | | **Entity** | Entitas | Objek yang memiliki identitas unik tersendiri yang membedakannya dari objek lain sepanjang siklus hidupnya. | | **Domain Event** | Peristiwa Domain | Catatan resmi mengenai peristiwa penting di masa lalu yang terjadi di dalam domain bisnis. | | **Event Sourcing** | Penelusuran Peristiwa | Pola penyimpanan di mana status akhir objek direkonstruksi dari aliran kronologis seluruh peristiwa yang pernah terjadi. | | **Anticorruption Layer (ACL)** | Lapisan Antikorupsi | Lapisan penerjemah data pelindung yang mengisolasi model baru dari struktur buruk sistem legacy (*Big Ball of Mud*). | | **Open Host Service (OHS)** | Layanan Host Terbuka | Protokol API standar terbuka yang terdokumentasi untuk memudahkan konsumsi oleh sistem lain. | | **Published Language (PL)** | Bahasa Publik Baku | Format skema pertukaran data standar (misal JSON Schema) yang dipublikasikan ke publik. | | **Anemic Domain Model** | Model Domain Anemia | Anti-pattern di mana kelas model hanya berisi variabel dan getter/setter tanpa logika perilaku bisnis. | | **Event Storming** | Badai Peristiwa | Metode desain cepat interaktif berbasis sticky notes warna-warni di dinding panjang bersama Pakar Bisnis. | | **Causal Consistency** | Konsistensi Kausalitas | Penjaminan bahwa peristiwa yang saling berhubungan sebab-akibat diproses dalam urutan kronologis yang sama di semua node. | | **Idempotent Receiver** | Penerima Idempoten | Penerima pesan yang menjamin hasil status akhir tetap sama aman meskipun pesan yang sama terkirim berulang kali. |