2009-08-18 6 views
5

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

मेरा सवाल है, क्या यह बहुत ही शरारती है कि इसमें इतनी बड़ी utils.c है जिसमें कई प्रकार की उपयोगिताएं हैं? क्या मुझे इसे कई अलग-अलग प्रकार की उपयोगिता फाइलों में तोड़ना चाहिए? जैसे graph_utils.c और इतने पर आप क्या सोचते हैं?

+0

शरारती = असंगठित? – Alex

+0

डोमेनिक, मुझे इस पोस्ट का जवाब महसूस हो रहा है (जो सभी एक ही बात कह रहे हैं) एक ही अर्थ में 'व्यक्तिपरक' हैं, एक डिजाइन पैटर्न 'व्यक्तिपरक' है;) दूसरे शब्दों में 'व्यक्तिपरक' टैग अनुचित है :) – horseyguy

+3

नहीं, शरारती = बारी-बारी। –

उत्तर

6

यदि यह सिर्फ आप ही सामान बनाए रखेंगे, तो यह एक बात है कि जटिलता उस बिंदु पर पहुंच जाती है जहां आप स्वयं को चीजों की खोज करते हैं। वह रिफैक्टर और पुनर्गठन करने का समय होगा (पुनर्गठित करने की लागत है, जैसे कि पुनर्गठन करने की कोई लागत नहीं है)।

यदि यह संभव है कि कोई भी ऐसी परियोजना को बनाए रखेगा जिसमें आपके यूटिल शामिल हैं, तो आपको पुनर्गठन करने का निर्णय लेने पर उनके दर्द बिंदु पर विचार करना होगा। उनकी तुलना में बहुत कम है।

6

मैं इसे विभिन्न उप-उपयोगों में तोड़ने के लिए प्रवृत्त करता हूं जैसा कि आप कहते हैं (graphics_utils) जब यह उचित हो जाता है।

9

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

2

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

+4

निश्चित रूप से वह करेगा। यह विशाल utils फ़ाइल में होगा! – womp

+1

@womp: lol + 5chars –

3

इसे तोड़ दें। सामग्री को ढूंढना आसान, पुन: उपयोग करना आसान, रिफैक्टर करने में आसान, यूनिट परीक्षण के लिए आसान होगा। मुझे हाल ही में स्थैतिक विधियों की एक विशाल जावा उपयोगिता कक्षा से आईएसओ -8601 दिनांक हैंडलिंग विधियों का एक सेट प्राप्त करने की आवश्यकता है, और मुझे आवश्यक कोड का 5% खोजना वाकई मुश्किल था।

0

हर किसी की तरह मैं उन्हें तोड़ दूंगा। लेकिन अब मैं विस्तार विधियों का उपयोग करता हूं, इसलिए मेरे पास प्रति वर्ग एक वर्ग (और एक फ़ाइल) होगी (उदा। StringExtensions, SqlDataReaderExtensions, आदि)। मुझे लगता है कि यह उपयोगिता विधियों को अच्छी तरह से तोड़ने के लिए जाता है।

7

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

http://ifacethoughts.net/2006/04/15/stable-dependencies-principle/

+0

यह बिल्ड समय को कम इष्टतम भी बना सकता है क्योंकि इस फ़ाइल से लिंक होने वाली हर चीज को बदलने पर इसे फिर से सम्मिलित करने की आवश्यकता होगी। –

2

एक और लाभ यह है कि अलग में फ़ाइल को तोड़ने से आता है जब आप स्रोत नियंत्रण में रखें, आप महीन बेहतर नियंत्रण हो सकता है है। यह वास्तव में उपयोगी है यदि आपके पास बिट्स हैं जो tweaked/विस्तारित/विशेष रूप से विशिष्ट हैं, और अन्य बिट्स जो अपेक्षाकृत स्थिर हैं।

2

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

मुझे ऐसे मॉड्यूल के साथ एक (बल्कि बड़ी) परियोजना मिली है और प्रोग्रामिंग तर्क है जिसके लिए 5-6 कार्यान्वयन (एक ही चीज़ के लिए) हैं।