Mohon maaf jika "Komposisi Hierarki" bukan sesuatu, tapi saya akan menjelaskan apa yang saya maksud dengan itu dalam pertanyaan.
Tidak ada programmer OO yang belum menemukan variasi "Pertahankan hierarki warisan tetap" atau "Lebih suka komposisi daripada warisan" dan sebagainya. Namun, hierarki komposisi yang mendalam juga tampak bermasalah.
Katakanlah kita membutuhkan kumpulan laporan yang merinci hasil percobaan:
class Model {
// ... interface
Array<Result> m_results;
}
Setiap hasil memiliki sifat tertentu. Ini termasuk waktu percobaan, serta beberapa meta-data dari setiap tahap percobaan:
enum Stage {
Pre = 1,
Post
};
class Result {
// ... interface
Epoch m_epoch;
Map<Stage, ExperimentModules> m_modules;
}
OK bagus. Sekarang, setiap modul eksperimen memiliki string yang menggambarkan hasil percobaan, serta kumpulan referensi ke set sampel eksperimental:
class ExperimentalModules {
// ... interface
String m_reportText;
Array<Sample> m_entities;
}
Dan kemudian masing-masing sampel memiliki ... well, Anda mendapatkan gambar.
Masalahnya adalah bahwa jika saya memodelkan objek dari domain aplikasi saya, ini sepertinya sangat alami, tetapi pada akhirnya, a Result
hanyalah sebuah wadah data yang bodoh! Tampaknya tidak ada gunanya membuat kelompok besar kelas untuk itu.
Dengan asumsi bahwa struktur data dan kelas yang ditunjukkan di atas dengan benar memodelkan hubungan dalam domain aplikasi, apakah ada cara yang lebih baik untuk memodelkan "hasil" seperti itu, tanpa menggunakan hierarki komposisi yang mendalam? Apakah ada konteks eksternal yang akan membantu Anda menentukan apakah desain seperti itu bagus atau tidak?