माफी अगर "रचना पदानुक्रम" एक बात नहीं है, लेकिन मैं समझाता हूँ कि मैं इस सवाल से क्या मतलब है।
कोई भी OO प्रोग्रामर नहीं है जो "विरासत वंशानुक्रम फ्लैट रखें" या "वंशानुक्रम पर पसंदीदा रचना" और इत्यादि की विविधता में नहीं आया है। हालांकि, गहरी रचना पदानुक्रम के रूप में अच्छी तरह से समस्याग्रस्त लगता है।
मान लें कि हमें किसी प्रयोग के परिणामों का विवरण देने वाली रिपोर्ट के संग्रह की आवश्यकता है:
class Model {
// ... interface
Array<Result> m_results;
}
प्रत्येक परिणाम में कुछ गुण होते हैं। इनमें प्रयोग के समय के साथ-साथ प्रयोग के प्रत्येक चरण के कुछ मेटा-डेटा शामिल हैं:
enum Stage {
Pre = 1,
Post
};
class Result {
// ... interface
Epoch m_epoch;
Map<Stage, ExperimentModules> m_modules;
}
ठीक है अच्छा है। अब, प्रत्येक प्रयोग मॉड्यूल में प्रयोग के परिणाम के साथ-साथ प्रयोगात्मक नमूना सेटों के संदर्भों के संग्रह का वर्णन करने वाला एक स्ट्रिंग है:
class ExperimentalModules {
// ... interface
String m_reportText;
Array<Sample> m_entities;
}
और फिर प्रत्येक नमूने में ... अच्छी तरह से, आपको तस्वीर मिलती है।
समस्या यह है कि अगर मैं अपने एप्लिकेशन डोमेन से ऑब्जेक्ट्स मॉडलिंग कर रहा हूं, तो यह एक बहुत ही प्राकृतिक फिट की तरह लगता है, लेकिन दिन के अंत में Result
यह डेटा का सिर्फ एक बेवकूफ कंटेनर है! इसके लिए कक्षाओं का एक बड़ा समूह बनाना सार्थक नहीं लगता।
यह मानते हुए कि डेटा संरचना और कक्षाएं ऊपर दिखाए गए एप्लिकेशन डोमेन में रिश्तों को सही ढंग से दर्शाती हैं, क्या इस तरह के "परिणाम" को मॉडल करने का एक बेहतर तरीका है, एक गहरी रचना पदानुक्रम का सहारा लिए बिना? क्या कोई बाहरी संदर्भ है जो आपको यह निर्धारित करने में मदद करेगा कि ऐसा डिज़ाइन एक अच्छा है या नहीं?