Saya telah melakukan banyak membaca baru-baru ini tentang entitas domain Always Valid. Saya menjadi percaya bahwa untuk memastikan entitas selalu valid saya perlu:
1) Hapus obsesi primitif dan masukkan aturan validasi / domain dalam konstruktor objek nilai seperti yang dijelaskan di sini: https://enterprisecraftsmanship.com/2016/09/13/validation-and-ddd/ . 2) Masukkan aturan validasi / domain dalam konstuktor entitas atau setter properti seperti dijelaskan di sini: http://gorodinski.com/blog/2012/05/19/validation-in-domain-driven-design-ddd/ .
Namun, saya kemudian melihat beberapa proyek Open Source seperti ini: https://github.com/gregoryyoung/mr . Dari apa yang saya pahami, penulis proyek ini adalah penganjur model domain yang selalu valid, namun saya melihat di sini di kelas InventoryItem: https://github.com/gregoryyoung/mr/blob/master/SimpleCQRS/Domain.cs . Saya perhatikan bahwa saya dapat melakukan ini:
InventoryItem inventoryItem = new InventoryItem();
atau ini:
InventoryItem inventoryItem2 = new InventoryItem(Guid.Empty,null);
Dalam pikiran saya ini berarti entitas diinisialisasi dalam keadaan tidak valid. Ini tampaknya menjadi kasus di semua proyek Open Source lain yang telah saya lihat baru-baru ini juga misalnya yang ini: https://github.com/dcomartin/DDD-CQRS-ES-Example/blob/master/src/Domain /Customer.cs .
Saya menyadari ada validasi kontekstual dalam proyek sumber terbuka ini ( https://martinfowler.com/bliki/ContextualValidation.html ). Saya juga menyadari bahwa ORM memerlukan konstruktor kosong default jika dipetakan ke model domain.
Apakah objek domain dalam status yang valid jika diinisialisasi dengan nilai default menggunakan konstruktor argumen nol / diinisialisasi dengan nilai kosong / nol?