2012-07-21 10 views
5

पुराना शीर्षक: प्रति इकाई कितने वर्गों की सलाह दी जाती है?क्या "डेल्फी प्रति फ़ाइल" नियम के साथ कुछ डेल्फी विशिष्ट समस्याएं हैं?

मेरा प्रश्न डेल्फी के लिए विशिष्ट है। मुझे लगता है कि जावा और सी # दुनिया में यह प्रति वर्ग एक फ़ाइल आमतौर पर एक स्वीकार्य अभ्यास है। मुझे लगता है कि यह डेल्फी में भी पालन करने का एक अच्छा नियम है, क्योंकि डेल्फी में निजी सदस्य वास्तव में निजी नहीं हैं यदि आपके पास एक इकाई में एक से अधिक कक्षाएं हैं।

तो मैं दो अलग-अलग वरिष्ठ (और संभवत: मेरे से अधिक अनुभवी) से सुनने के लिए हैरान था, प्रोग्रामर मुझे बताते हैं कि मैं अपना कोड बहुत अधिक विभाजित करता हूं। उनमें से एक ने मुझे एक इकाई में 5-6 कक्षा रखने के बारे में शर्मिंदा नहीं होने के लिए कहा।

क्या "प्रति वर्ग एक मॉड्यूल" नियम के साथ कुछ समस्या है जिसे मुझे पता नहीं है, जो इन प्रोग्रामर की प्रतिक्रियाओं को वारंट और समझा सकता है?

+0

डेल्फी के साथ समस्या यह है कि फ़ाइल नाम नाम स्थान के रूप में दोगुना हो जाता है है। एक महत्वपूर्ण यह है कि कई इकाइयां परेशान हैं। – CodesInChaos

+2

दिलचस्प सवाल, हालांकि SO के लिए एक अच्छा फिट नहीं है। डेल्फी की आरटीएल/वीसीएल इकाइयों पर एक नज़र डालें, उदाहरण के लिए, 'Vcl.Controls'। कक्षाओं के टन। लेकिन फिर 'इंडी' प्रणाली को देखें - वे प्रति इकाई अवधारणा के एक वर्ग का पालन करते प्रतीत होते हैं। कहा जा रहा है, यह वास्तव में राय का विषय है, और आप सबसे अधिक आरामदायक कैसे हैं। –

उत्तर

2

मुझे नहीं पता कि मॉड्यूल द्वारा आपका क्या मतलब है।

जावा को प्रति फ़ाइल एक सार्वजनिक कक्षा की आवश्यकता होती है, और कक्षा का नाम फ़ाइल नाम से मेल खाना चाहिए। कोई अगर, और या परंतु नहीं। आपके पास उस फ़ाइल में अन्य पैकेज निजी या निजी विधियां हो सकती हैं, लेकिन केवल एक सार्वजनिक कक्षा है।

यदि "मॉड्यूल" का अर्थ है "पैकेज", तो मैं कहूंगा कि पैकेज में एक से अधिक कक्षाएं आम हैं। कोई मानक नहीं है; यह देखने के लिए खुद जेडीके पर एक नज़र डालें। java.util, java.lang, java.sql, और javax.swing में कई कक्षाएं हैं।

उन दोनों के अलावा, मुझे नहीं पता कि आप या कथित "वरिष्ठ प्रोग्रामर" क्या कह रहे हैं। मैं इस बात से सहमत हूं कि अतिरिक्त कुछ भी करना संभव है, और dogmatic नियमों का अंधाधुंध पालन नहीं किया जाना चाहिए।

लेकिन अपघटन एक कंप्यूटर विज्ञान है- नहीं, एक समस्या हल करने - मौलिक। इसे अधिक करने के बजाय इसे उपेक्षित करना अधिक आम है।

+0

मॉड्यूल द्वारा मेरा मतलब फ़ाइल है। डेल्फी में उन्हें इकाइयां कहा जाता है। –

+1

फिर मैं आपके "वरिष्ठ प्रोग्रामर" से असहमत हूं। यह मेरे लिए प्रति फ़ाइल आमतौर पर एक वर्ग है। मैं पूछूंगा कि फाइलों की संख्या को कम करने का क्या फायदा है? ए 1: 1 रिलेशनशिप मुझे फ़ाइल गिनती को देखकर प्रोजेक्ट के आकार को गेज करने देता है। उन्हें जोड़कर मुझे अंदर देखने के लिए मजबूर करता है। क्या फायदा है? – duffymo

+3

@ डफिमो, यह आपके लिए आम हो सकता है, लेकिन यह शायद ही कभी डेल्फी पर्यावरण प्रणाली में देखा जाता है। जैसे प्रति परियोजना एक फ़ाइल चरम है (भले ही यह कभी-कभी संभव हो), इसलिए प्रति वर्ग एक फ़ाइल केवल दूसरी चरम है। जबकि जावा को इसकी आवश्यकता होती है, डेल्फी आपको खुद को तय करने की आजादी देता है। इससे भी अधिक, डेल्फी भी किसी फ़ाइल में किसी वर्ग को अनुमति नहीं देता है। –

2

यह निर्भर करता है। पालन ​​करने के लिए कोई सटीक नियम नहीं है। आम तौर पर आपको लॉजिकल, सामान्य निर्भरता द्वारा कक्षाओं में कक्षाओं को ग्रुप करने की आवश्यकता होती है या व्यवसाय कार्यक्षमता को समझने के लिए बेहतर है।

उदाहरण के लिए, यदि आप छोटे सहायक, adiacent, पूरक कक्षाओं का एक बहुत कुछ है वहाँ एक एकल इकाई में उन सभी को डाल करने के लिए एक कारण है। बोरलैंड की तरह डीबीपीएएस इकाई में किया था। वहाँ सभी सामान्य डीबी सामान: TDataSet, TDataSource, TField आदि ...

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

आमतौर पर जब आप लिखते हैं "फू का उपयोग करता है , " इसका मतलब है कि कंपाइलर में फू से सभी सामान शामिल हैं। आप कक्षाओं, consts, प्रकार आदि का उपयोग कर सकते हैं ... तो, विभाजित करने के लिए अच्छा है लेकिन तर्कसंगतता रखते हुए।

डेल्फी इकाइयों के नवीनतम संस्करणों में namespaces के रूप में माना जाता है। आप अपने कोड को व्यवस्थित कर सकते हैं।

+0

प्रति TForm तक भी एक फ़ाइल का मतलब यह नहीं है कि इस फ़ाइल में अन्य कक्षाएं नहीं हो सकती हैं। –

0

प्रति इकाई एक वर्ग बहुत सख्त है। कभी-कभी कक्षाएं संबंधित होती हैं ताकि उन्हें एक इकाई में शामिल किया जा सके।

संरक्षित और निजी चर के लिए पिछले दरवाजे के साथ समस्या यह सख्त निर्देश का उपयोग द्वारा निर्धारित किया जा सकता है:

type 
    TClass1 = class 
    private 
    FField1 : Integer; 
    strict private 
    FField2 : Integer; 
    end; 

    TClass2 = class 
    public 
    procedure MessWithClass1; 
    end; 



implementation 
    procedure TClass2.MessWithClass1; 
    var 
    c1 : TClass1; 
    begin 
    c1.FField1 := 1; 
    c1.FField2 := 2; // Fails! 
    end;  
+0

हां, मैं संबंधित वर्गों के बारे में सहमत हूं। सख्त निर्देश के बारे में - दुर्भाग्य से डेल्फी 7 के बाद इसे पेश किया गया था। –