2009-01-18 12 views
5

एक पुस्तकालय या एक मॉड्यूल के सार्वजनिक एपीआई लिखते समय उपयोग के विभिन्न मामलों में कई अन्य कोड द्वारा उपयोग किया जाएगा, उपयोग की आसानी के साथ लचीलापन संतुलन का सबसे अच्छा तरीका क्या है? मेरा मानना ​​है कि इसमें अक्सर दो संघर्ष होते हैं, आप जितना अधिक लचीला बनाते हैं, उतना मुश्किल है कि इसे किसी भी विशेष चीज़ को अच्छी तरह से किया जाए।एपीआई डिजाइन: लचीलापन बनाम। आसानी से उपयोग

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

उत्तर

2

आप एक मानक संगठन है कि दूसरों पर अपनी कक्षाओं की उपयोगिता को लागू कर सकते हैं का हिस्सा हैं तो आप लचीला और जटिल (जैसे एसटीएल) के साथ जा सकते हैं।

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

मेरी राय में, "गुणवत्ता की आसानी" केवल कोड की गुणवत्ता को रेटिंग करने के लिए "यह सही काम करता है" के लिए दूसरा है।

तो लचीलापन जोड़ने पर आसानी से सीखने और उपयोग करने के खर्च पर नीचे की रेखा आती है, तब तक लचीलापन न जोड़ें जब तक यह साबित न हो कि लचीलापन आवश्यक है।

2

मुझे लगता है कि आपको लाइब्रेरी के लिए लक्षित दर्शकों पर विचार करने की आवश्यकता है - यदि आप एक पुस्तकालय लिख रहे हैं जो कम अनुभवी डेवलपर अच्छी तरह से उपयोग कर सकते हैं, तो आपको उन्हें मदद करने के बारे में सोचना होगा। सी ++ एसटीएल के मामले में शायद अधिकतर डेवलपर्स जो उनका उपयोग कर रहे हैं, वे अतिरिक्त मैकेनिक्स को ध्यान में रखते हैं क्योंकि उनका उपयोग उनके लिए किया जाता है और लचीलापन को और अधिक महत्व देता है।

आप अपने एपीआई के माध्यम से एक्सेस के दो स्तरों के बारे में सोचना चाह सकते हैं, जिसमें एक स्तर है जो चीजों को सरल और एक परत रखता है जो अधिक नियंत्रण की अनुमति देता है। लेकिन आप देखना चाहते हैं कि उस लंबाई में जाने से पहले ढांचा कैसे पहले विकसित होता है।

0

मैं .NET बेस क्लास लाइब्रेरी एपीआई का शौक हूं। इन पढ़ते समय पुस्तकालय की डिजाइन सबसे these guidelines.

इस प्रकार है, और साथ पुस्तक, मैं ज्ञान के कई प्रमुख हिस्सों ले लिया:

  1. एपीआई ध्यान में रखते हुए कि आधुनिक संपादकों IntelliSense क्षमताएं होती हैं डिजाइन किया गया था। लंबे नाम स्वीकार्य हैं क्योंकि आप पूर्ण श्रेणी और विधि नाम टैब-लाइन कर सकते हैं। यह छोटे, obfuscated नामों के साथ strnicmp()

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

+0

यह निश्चित रूप से एक व्यक्तिपरक बात है, हालांकि: मुझे .NET एपीआई डरावनी लगता है। मैं एक कार्यात्मक-शैली एपीआई पसंद करता हूं जिसमें ज्यादातर अपरिवर्तनीय प्रकार और मुक्त (या स्थैतिक) फ़ंक्शन हैं जो उन पर काम करते हैं। कम राज्य = कम युग्मन, कम थ्रेडिंग मुद्दों, आसानी से पढ़ने के लिए कोड। लेकिन यह राय का विषय है। –

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