2015-03-06 11 views
7

मैं जावा भाषा से संबंधित कुछ ट्यूटोरियल का अध्ययन कर रहा था। मैं सोच रहा था कि क्या मुझे हर बार अमूर्त होना चाहिए कि मैं कुछ कोड करता हूं, और किसी भी प्रकार के मानक और ढेर पर?एंड्रॉइड में जावा के साथ एब्स्ट्रक्शन

मैंने देखा है कि उदाहरण के लिए हर वसंत सेवाओं के साथ, हम भी सार नियंत्रकों, JavaEE पर EJBs साथ इंटरफेस का उपयोग कर ढेर कर सकता है आदि

मैं सोच रहा था कि का उद्देश्य क्या है? एंड्रॉइड एसडीके के साथ विकास करते समय क्या मुझे वही काम करना चाहिए?

क्या मुझे प्रत्येक कक्षा को सारणी देना चाहिए?

+0

यदि आप कुछ नया बना रहे हैं तो रूट इंटरफ़ेस या कम होना चाहिए, आप अमूर्त वर्ग का उपयोग कर सकते हैं। – Prashant

उत्तर

5

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

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

सरकारी डॉक्स से:

1.Be careful with code abstractions

2।Avoid dependency injection frameworks

3.Avoid Creating Unnecessary Objects

4.Prefer Static Over Virtual

5.Avoid Internal Getters/Setters

संपादित करें:

हाल ही में Dagger की कोशिश करने के बाद, मुझे यह मानना ​​है कि बिंदु 2 अब तक पुराना हो सकता है। मैं क्या कह सकता हूं ... मैं बहुत देर से डैगर पार्टी में आया था।

2

जब भी आपके पास ऐसी कक्षा होती है जिसे आप अपनी सभी विधियों को लागू नहीं करना चाहते हैं तो आपको अमूर्तता की आवश्यकता होती है। इसे प्राप्त करने वाले वर्गों को उन सभी विधियों को लागू करने के लिए मजबूर किया जाएगा अन्यथा आपको उप-वर्गों को सार के रूप में घोषित करने की आवश्यकता होगी।

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

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

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

this, this और this और open/close principle पर भी देखें।

1

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

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