2010-01-14 8 views
5

कुछ डेटाबेस एप्लिकेशन डेवलपर के संपादन इसDataModule मुख्य रूप

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TDM, DM); 
    Application.CreateForm(TMainForm, MainForm); 
{...} 
    Application.Run; 
end. 

सवाल यह है की तरह परियोजना स्रोत फ़ाइल से मुख्य रूप से पहले एक डेटा मॉड्यूल बनाने के लिए पसंद करते हैं से पहले बनाए गए? पेशेवर और contras क्या हैं?

+1

कोई ऑनक्रेट हैंडलर नहीं है या नहीं। मेनफॉर्म डेटामैड्यूल में घोषित डेटा स्रोतों का संदर्भ दे सकता है, लेकिन निर्माण के क्रम को बदलने के बिना उन्हें सफलतापूर्वक हल किया जाता है। – kludg

+2

इसका मतलब यह नहीं है कि आपको प्रोजेक्ट स्रोत को संपादित करना होगा। परियोजना विकल्प संवाद में डेटामोड्यूल और रूपों का निर्माण क्रम बदला जा सकता है। बनाया गया पहला रूप मुख्य रूप होगा, लेकिन इससे पहले बनाए गए डाटामोड्यूल हो सकते हैं। आप इस प्रश्न का मेरा जवाब भी देख सकते हैं: http: // stackoverflow।कॉम/प्रश्न/382527/डेल्फी-ऐप-प्रारंभिक-सर्वोत्तम-प्रथाओं-दृष्टिकोण/383197 # 383197 –

+0

उवे राबे में - मुझे पता है कि बहुत सारे विकल्प हैं। मैं कभी-कभी किसी भी रूप के बिना एक जीयूआई इकाई परीक्षण परियोजना संकलित करता हूं। – kludg

उत्तर

15

स्पष्ट कारण यह होगा कि मुख्य फ़ॉर्म को इसके सेटअप के लिए डेटा मॉड्यूल की आवश्यकता है। उदाहरण के लिए, यदि वहां कुछ ऐसा है जो मुख्य फॉर्म संदर्भों को ऑनक्रेट में संदर्भित करता है, तो निश्चित रूप से डेटा मॉड्यूल को पहले तैयार होना होगा।

अन्यथा, यह वास्तव में कोई फर्क नहीं पड़ता।

+0

मैं सहमत हूं, मेनू को गतिशील रूप से उत्पन्न करने के लिए भी देखा जाता है। – Eduardo

6

मैं मेसन के उत्तर से सहमत हूं क्योंकि यह बताता है कि लोग ऐसा क्यों कर सकते हैं। हालांकि, मेरा मानना ​​है कि यह एक बुरा दृष्टिकोण है क्योंकि यह आईडीई द्वारा बनाए गए कोड में निर्भरता को छुपाता है। मेरी राय में, डेटा मॉड्यूल को ऑटो निर्माण सूची से हटा दिया जाना चाहिए और इसे मुख्य रूप की ऑनक्रेट विधि में बनाया जाना चाहिए।

+0

मैं असहमत हूं कि डेटा मॉड्यूल को मेनफॉर्म की ऑनक्रेट विधि द्वारा बनाया जाना चाहिए और लगता है कि यह खराब शैली है। इसके बजाय, मैं पहले हमेशा मुख्य रूप बनाउंगा, और डेटा मॉड्यूल दूसरा, और मैं मुख्य रूप से किसी भी कोड को नहीं रखूंगा जो किसी अन्य रूप पर, इसके निर्माण या विनाश के दौरान निर्भर करता है। इसके बजाए, मैं अलग-अलग प्रारंभिक कार्यों को लिखूंगा, और कुछ समय में होने वाले कोड द्वारा उन्हें लिखने के लिए कहूंगा। मुझे फॉर्मक्रेट घटनाएं पसंद नहीं हैं जो स्थानीय वस्तुओं को बनाने के अलावा बहुत कुछ करती हैं जो फॉर्म के अंदर निजी/संरक्षित फ़ील्ड हैं। कुछ भी फॉर्मक्रेट में नहीं होना चाहिए। –

0

सिर्फ इसलिए कि डेटाफ्यूल सामग्री को आश्वस्त करने का सबसे अजीब तरीका मेनफॉर्म पर उपलब्ध है। यदि आपके पास केवल एक डेटा मॉड्यूल है, तो कोई परेशानी नहीं है।

5

वास्तव में इस पर दो शिविर हैं, और दोनों सही हैं।

पहला एप्लिकेशन प्रत्येक फॉर्म/डेटा मॉड्यूल के जीवन को प्रबंधित करने देता है। इस परिदृश्य में, यदि मुख्य रूप डेटा मॉड्यूल का उपयोग करता है, तो इसे उपयोग किए जाने से पहले इसे बनाया जाना चाहिए। यह छोटे अनुप्रयोगों के लिए ठीक काम करता है, लेकिन जब आप कई रूपों के साथ बड़े अनुप्रयोगों को प्राप्त करते हैं तो लोडिंग ओवरहेड होता है ... हालांकि एक बार एप्लिकेशन लोड होने के बाद एक फॉर्म प्रदर्शित करना लगभग तुरंत ही स्मृति में बनाया गया है। चूंकि प्रत्येक फॉर्म/संसाधन पहले से ही बनाया गया है, इसलिए एप्लिकेशन चलाने पर भी एक बड़ी मेमोरी हिट होती है। यह विधि डिफ़ॉल्ट है कि डेल्फी आपको "लीड" भी करता है क्योंकि आप एप्लिकेशन में नए फॉर्म/डेटा मॉड्यूल जोड़ते हैं। यदि आप मुख्य प्रारूप के ऑनक्रेट में डेटामैड्यूल का उपयोग नहीं करते हैं, तो यह ऑर्डर ऑर्डर में कम हो सकता है क्योंकि इसे एप्लिकेशन के बाद तक नहीं बुलाया जाएगा। रून लॉन्च किया गया है।

दूसरा शिविर प्रत्येक फॉर्म/डेटा मॉड्यूल के निर्माण और विनाश को संभालना चाहता है (आमतौर पर मेनफॉर्म के अलावा सभी रूपों के लिए)। इस विधि का लाभ यह है कि एप्लिकेशन तेजी से लोड होगा, और स्टार्टअप पर तुरंत कम स्मृति का उपभोग करेगा। आम तौर पर इस परिदृश्य में, यह मुख्य रूप (या अन्य रूप) है जो उनके द्वारा उपयोग किए जाने वाले प्रत्येक फॉर्म/डेटा मॉड्यूल के जीवन चक्र को पूरी तरह से प्रबंधित करता है। यह विधि कई रूपों के साथ बड़े अनुप्रयोगों के लिए सबसे अच्छा काम करती है।

0

अन्य सभी घटकों के निर्माण से पहले मेनफॉर्म प्रदर्शित नहीं होता है। तो मूल रूप से आप दोनों मामलों में इंतजार करेंगे, मौसम डेटा-मॉड्यूल पहले बनाया गया है या नहीं। अपने ग्रिड मुख्य फार्म पर है तो आप मुसीबत में पड़ सकता है जब (या प्रश्नों के) घटना (के बाद से खोलने) डेटा-मॉड्यूल मेज से कुछ इस तरह उपयोग करने की कोशिश:

cxGrid1DBTableView1.Controller.TopRowIndex :=0; 
cxGrid1DBTableView1.DataController.FocusedRowIndex := 0; 

कारण स्पष्ट है: ग्रिड अभी तक नहीं बनाया गया है .. मुझे स्वीकार करना होगा, मैं पहले डेटामैड्यूल भी बना सकता हूं। लेकिन ऐसे कारण हैं, जैसा कि मैंने अभी वर्णित किया है, जब ऐसा करना व्यावहारिक नहीं है।

संबंधित मुद्दे