Tôi cũng đang cố áp dụng các nguyên tắc thiết kế theo hướng miền cho ứng dụng của mình, với mô hình tên miền phong phú chứa cả hai trường dữ liệu và logic nghiệp vụ. Tôi đã đọc nhiều cuốn sách DDD, nhưng có vẻ như mô hình miền của họ (được gọi là thực thể) rất đơn giản. Nó trở thành một vấn đề khi tôi có một mô hình miền với 10-15 trường dữ liệu, chẳng hạn như một trường bên dưới:Thiết kế định hướng tên miền: Cách xử lý các mô hình phức tạp với nhiều trường dữ liệu?
class Job extends DomainModel{
protected int id;
protected User employer;
protected string position;
protected string industry;
protected string requirements;
protected string responsibilities;
protected string benefits;
protected int vacancy;
protected Money salary;
protected DateTime datePosted;
protected DateTime dateStarting;
protected Interval duration;
protected String status;
protected float rating;
//business logic below
}
Như bạn thấy, mô hình miền này chứa rất nhiều trường dữ liệu và tất cả chúng đều quan trọng và không thể bị tước đi. Tôi biết rằng một mô hình tên miền phong phú không nên chứa các phương thức setter, mà là truyền dữ liệu của nó tới hàm tạo và các trạng thái biến đổi bằng cách sử dụng logic nghiệp vụ. Tuy nhiên, đối với mô hình miền trên, tôi không thể chuyển tất cả mọi thứ cho hàm tạo, vì nó sẽ dẫn đến 15+ tham số trong phương thức hàm tạo. Một phương thức không nên chứa nhiều hơn 6-7 tham số, bạn không nghĩ sao?
Vì vậy, tôi có thể làm gì để giải quyết một mô hình miền với nhiều trường dữ liệu? Tôi có nên cố gắng phân hủy nó không? Nếu vậy, làm thế nào? Hoặc có lẽ, tôi chỉ nên sử dụng một lớp Builder hoặc phản ánh để khởi tạo thuộc tính của nó khi instantiation vì vậy tôi sẽ không gây ô nhiễm constructor với rất nhiều đối số? Bất cứ ai có thể đưa ra một số lời khuyên? Cảm ơn.
Tôi hiểu, vâng tôi nghĩ tôi nên bắt đầu triển khai nhiều đối tượng giá trị hơn, như đối tượng Giá trị tiền tôi đã có. Cảm ơn gợi ý, tôi sẽ bắt đầu bằng cách soạn các trường dữ liệu bằng các đối tượng giá trị nhỏ hơn và sử dụng các đối tượng giá trị trong mỗi thực thể. Tôi biết các lĩnh vực bảo vệ đôi khi phá vỡ đóng gói, vì vậy tôi nên chuyển sang tư nhân trong hầu hết các trường hợp, cảm ơn quá. Mặc dù vậy, tôi không chắc chắn về mô hình miền và điều thực thể, theo hiểu biết của tôi một mô hình miền là một thực thể hoặc thực thể là một mô hình miền có nhận dạng, điều này có đúng không? –
@LordYggdrasill Mô hình tên miền là tập hợp toàn bộ "những thứ" có ý nghĩa trong miền của bạn, ví dụ: thực thể, đối tượng giá trị, v.v. Xem ví dụ [bài viết này] (https://en.wikipedia.org/wiki/Domain_model), sơ đồ hiển thị một mô hình miền mẫu có chứa nhiều lớp. – theDmi
Tôi hiểu, cảm ơn. Tôi hiểu điều này tốt hơn sau khi đọc một số bài viết về tổng hợp gốc. –