2009-06-04 9 views
12

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

+0

ये प्रासंगिक लगते हैं: http://stackoverflow.com/questions/469161/how-do-you-define-a-good-or-bad-api http://stackoverflow.com/questions/750112/overengineering -how-to-escape- –

उत्तर

19

"डेवलपर के परिप्रेक्ष्य से कुछ चेतावनी संकेत क्या हैं कि आपके एपीआई को अतिरंजित किया जा सकता है?"

कोई उपयोग केस नहीं।

यदि आप "ऐसा करने के लिए सरल" परिदृश्यों के माध्यम से नहीं चल सकते हैं, तो आप विशिष्ट उपयोग मामलों के साथ एक उपयोगी एपीआई तैयार नहीं कर रहे हैं।

आपके दस्तावेज़ उन मामलों का उपयोग होना चाहिए।

विशेषताएं जो सीधे उपयोग मामलों को संबोधित नहीं करती हैं, शायद अधिक इंजीनियरिंग हैं।

+2

+1 - मेरी टिप्पणी के रूप में एक ही समझ लेकिन जल्दी। – dkretz

1

दो (संबंधित) सवाल अपने आप को तुरंत दिमाग में आते हैं पूछने के लिए:

  • वहाँ चीजें हैं जो एक से अधिक तरीके से किया जा सकता है?
  • क्या एपीआई पर विधियों/गुण हैं जिन्हें शेष एपीआई के संदर्भ में व्यक्त किया जा सकता है?

अधिक मुश्किल एक संकेत एपीआई के रूप में सरल नहीं है जवाब देने के लिए, और अपने आप में overengineering का संकेत है, लेकिन निश्चित रूप से के रूप में यह अभी तक हो सकता है:

  • वहाँ अन्य तरीकों/आप गुण हैं परिचय कर सकते हैं जो आपके द्वारा पेश किए गए (अन्य दो प्रश्नों के आधार पर) को हटाने के लिए संभव बनाता है
+0

लेकिन यह मानवीय इंटरफेस को रोक देगा (जैसा कि फाउलर द्वारा वर्णित है)। Humane! = Overengineered। –

2

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

2

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

एपीआई डिज़ाइन करना एक उपयोगकर्ता इंटरफ़ेस को डिजाइन करने जैसा होना चाहिए। यूआई के सभी अधिकांश अवधारणाओं, उदाहरण के लिए, KISS सिद्धांत या यहाँ तक कि Kaizen एक API द्वारा अपनाया जा सकता है।

मैं उन यूआई अवधारणाओं से लिंक चाहते हैं, लेकिन मैं एक नया उपयोगकर्ता हूँ तो वे मुझे पोस्ट 1 से अधिक हाइपरलिंक नहीं दूँगा। वहां अच्छा उदाहरण है: स्टैक ओवरफ्लो, पोस्ट करने से पहले हमें बताएं;)।

11

आप गूगल टेक टॉक How To Design A Good API and Why it Matters यहोशू बलोच द्वारा की जांच करनी चाहिए ... वह इस सामान का एक बहुत शामिल हैं।

+3

+1, इसके साथ लिंक करने जा रहा था, साथ ही - स्लाइड भी उपलब्ध हैं: http://lcsd05.cs.tamu.edu/slides/keynote.pdf – none

+3

यहां, आप वीडियो और स्लाइड को एकसाथ देख सकते हैं, एक ही ब्राउजर व्यू में एम्बेडेड: http://www.infoq.com/presentations/effective-api- डिज़ाइन – none

+0

फ्रैंक होने के लिए, ब्लॉच द्वारा बनाए गए एपीआई के अधिकांश इंजन ओवर-इंजीनियर इम्हो हैं। फिर भी उस वीडियो – Pacerier

1

जब यह इतना चालाक है कि कोई और इसे समझ नहीं सकता है।

+1

में अच्छे टेकवे पॉइंट हैं जब तक कि मैंने इसे लिखा नहीं;) –

4

जब एक आम API कॉल के लिए स्टैक ट्रेस स्क्रॉल करने के पूरे बात को देखने के लिए की आवश्यकता है।

1

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

(एपीआई डिजाइन बहुत भाषा डिजाइन के समान है, और यहाँ मैं अनिवार्य रूप से योजना दर्शन — espousing हूँ बजाय एपीआई में और अधिक दिनचर्या ढेर, यह आसान बनाने और रचना तंत्र कि अनावश्यक अतिरिक्त दिनचर्या प्रस्तुत करना शामिल हैं।)

5

एक चाल मुझे बहुत उपयोगी मिली और इससे पहले मुझे आपकी मदद मिली है, कोड के पहले, उसके दौरान और बाद में दस्तावेज़ लिखना है।

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

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

कोडिंग के बाद, मैं अपने यूनिट परीक्षणों से कॉपी किए गए वास्तविक संकलित और परीक्षण कोड के साथ टिप्पणियों में नमूना कोड को प्रतिस्थापित करता हूं और इंटरफ़ेस के व्यवहार को और दस्तावेज करता हूं। इंजीनियरिंग पर एक और संकेत यह है कि जब मेरा यूनिट परीक्षण इंटरफ़ेस परिवर्तन के साथ नहीं रह सकता है क्योंकि बहुत से चलने वाले हिस्सों और एक ही चीज करने के लिए कई तरीके हैं और एक घातीय अनुपात में यूनिट परीक्षण वृद्धि होती है।

+0

अच्छे अंक, लेकिन पढ़ने के लिए मुश्किल है। कुछ पैराग्राफ ब्रेक मदद कर सकते हैं। –

+0

पैराग्राफ ब्रेक के साथ सुधारित। धन्यवाद। –

0

API का उपयोग करते है: (1) अधिक कुंठित, और अधिक जटिल, कम कुशल, और कम पूर्वानुमान सिर्फ अंतर्निहित प्रौद्योगिकी का उपयोग कर की तुलना में, और (2) एक महत्वपूर्ण लाभ के लिए प्रदान नहीं करता है सुरक्षा, क्षमता, या पार मंच स्वतंत्रता।

0

मेरे अनुभव में आप बता सकते हैं कि पूरी परियोजना महीनों तक कब आयोजित की जाती है, एपीआई समाप्त होने की प्रतीक्षा कर रही है।