Gần đây tôi đã đọc rất nhiều về các thực thể miền Luôn hợp lệ. Tôi đã tin rằng để đảm bảo các thực thể luôn hợp lệ, tôi cần phải:
1) Xóa nỗi ám ảnh nguyên thủy và đặt các quy tắc xác thực / tên miền vào các hàm tạo đối tượng giá trị như được giải thích ở đây: https : //enterpriseccraft Skill.com/2016/09/13/validation-and-ddd/ . 2) Đặt quy tắc xác thực / tên miền vào bộ tạo của các thực thể hoặc setters tài sản như được giải thích ở đây: http://gorodinski.com/blog/2012/05/19/validation-in-domain-driven-design-ddd/ .
Tuy nhiên, sau đó tôi xem xét một số dự án Nguồn mở như dự án này: https://github.com/gregoryyoung/mr . Từ những gì tôi hiểu, tác giả của dự án này là người ủng hộ mô hình miền luôn hợp lệ và tôi xem ở đây tại lớp InventoryItem: https://github.com/gregoryyoung/mr/blob/master/SimpleCQRS/Domain.cs . Tôi nhận thấy rằng tôi có thể làm điều này:
InventoryItem inventoryItem = new InventoryItem();
hoặc này:
InventoryItem inventoryItem2 = new InventoryItem(Guid.Empty,null);
Trong tâm trí của tôi điều này có nghĩa là thực thể được khởi tạo ở trạng thái không hợp lệ. Đây dường như là trường hợp trong tất cả các dự án Nguồn mở khác mà tôi đã xem gần đây, ví dụ như dự án này: https://github.com/dcomartin/DDD-CQRS-ES-Example/blob/master/src/Domain /Customer.cs .
Tôi nhận thấy có xác thực theo ngữ cảnh trong các dự án nguồn mở này ( https://martinfowler.com/bliki/ContextualValidation.html ). Tôi cũng nhận ra rằng các ORM cần một hàm tạo trống mặc định nếu được ánh xạ tới mô hình miền.
Là một đối tượng miền ở trạng thái hợp lệ nếu nó được khởi tạo với các giá trị mặc định bằng cách sử dụng hàm tạo đối số bằng không / được khởi tạo với các giá trị rỗng / null?