हमारे डेल्फी 2007 आवेदन में हम निम्नलिखित निर्माण का एक बहुत उपयोग कर रहे हैं
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData));
FindOwnerClass एक विशिष्ट वर्ग (उदाहरण TDMBasicData) खोजने के लिए वर्तमान घटक के मालिक पदानुक्रम को ऊपर की ओर ले जाता है। परिणामी वस्तु को फ़ील्ड चर FDMBasic में संग्रहीत किया जाता है। हम इसका उपयोग मुख्य रूप से डेटाटोडुल्स को पारित करने के लिए करते हैं।
उदाहरण: एक रिपोर्ट बनाते समय, परिणामी डेटा को संकुचित किया जाता है और एक datamodule TDMReportBaseData के माध्यम से एक्सेस की गई तालिका के ब्लॉब फ़ील्ड में संग्रहीत किया जाता है। हमारे आवेदन के एक अलग मॉड्यूल में, रिपोर्टबेडल का उपयोग करके डेटा को पृष्ठांकित रूप में रिपोर्ट दिखाने की कार्यक्षमता है। इस मॉड्यूल (TDMRBReport) का मुख्य कोड, कंप्रेस्ड ब्लॉब डेटा को अलग-अलग टेबलों में बदलने के लिए एक TRBTempdatabase का उपयोग करता है, जो कि रिपोर्टबिल्डर रनटाइम रिपोर्टडेसिग्नर में प्रयोग करने योग्य होते हैं। TDMRBReport में सभी प्रकार के रिपोर्ट-संबंधित डेटा (रिपोर्ट का प्रकार, रिपोर्ट की गणना, आदि) के लिए TDMReportBaseData तक पहुंच है। TRBTempDatabase TDMRBReport में निर्मित है, लेकिन TDMReportBedata तक पहुँच है। तो यह अब ऊपर निर्माण का उपयोग करके किया जाता है:
constructor TRBTempDatabase.Create(aOwner: TComponent);
begin
inherited Create(aOwner);
FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData;
end;{- .Create }
मेरी भावना यह है कि इसका मतलब है कि TRBTempDatabase अपने मालिक को बहुत कुछ जानती है, और मैं सोच रहा था कि क्या यह किसी प्रकार की कोड गंध या एंटी-पैटर्न है।
इस बारे में आपके विचार क्या हैं? क्या यह एक कोड गंध है? यदि हां, तो बेहतर तरीका क्या है?