Xin lỗi nếu "Cấu trúc phân cấp" không phải là một điều, nhưng tôi sẽ giải thích ý của tôi trong câu hỏi.
Không có bất kỳ lập trình viên OO nào không bắt gặp một biến thể "Giữ phân cấp thừa kế phẳng" hoặc "Thích thành phần hơn thừa kế", v.v. Tuy nhiên, hệ thống phân cấp thành phần sâu dường như cũng có vấn đề.
Giả sử chúng ta cần một tập hợp các báo cáo chi tiết về kết quả của một thử nghiệm:
class Model {
// ... interface
Array<Result> m_results;
}
Mỗi kết quả có tính chất nhất định. Chúng bao gồm thời gian thử nghiệm, cũng như một số dữ liệu meta từ mỗi giai đoạn thử nghiệm:
enum Stage {
Pre = 1,
Post
};
class Result {
// ... interface
Epoch m_epoch;
Map<Stage, ExperimentModules> m_modules;
}
Tuyệt. Bây giờ, mỗi mô-đun thử nghiệm có một chuỗi mô tả kết quả của thử nghiệm, cũng như một tập hợp các tham chiếu đến các bộ mẫu thử nghiệm:
class ExperimentalModules {
// ... interface
String m_reportText;
Array<Sample> m_entities;
}
Và sau đó mỗi mẫu có ... tốt, bạn sẽ có được hình ảnh.
Vấn đề là nếu tôi đang mô hình hóa các đối tượng từ miền ứng dụng của mình, điều này có vẻ như rất phù hợp tự nhiên, nhưng vào cuối ngày, a Result
chỉ là một thùng chứa dữ liệu câm! Có vẻ không đáng để tạo ra một nhóm lớn các lớp cho nó.
Giả sử rằng các cấu trúc dữ liệu và các lớp được hiển thị ở trên mô hình chính xác các mối quan hệ trong miền ứng dụng, có cách nào tốt hơn để mô hình hóa một "kết quả" như vậy, mà không cần dùng đến một hệ thống phân cấp thành phần sâu? Có bất kỳ bối cảnh bên ngoài nào sẽ giúp bạn xác định xem một thiết kế như vậy có phải là một thiết kế tốt hay không?