2010-08-07 18 views
5

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

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

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

उत्तर

6

मुझे नहीं लगता कि आपको केवल अपनी कार्यक्षमता के साथ सामग्री प्रदाता बनाने में समस्या होनी चाहिए जो आपके प्रत्यक्ष डेटाबेस कोड के शीर्ष पर बैठती है। एक सामग्री प्रदाता वास्तव में संरचित डेटा तक पहुंचने के लिए केवल एक अमूर्त है जो SQLite की तरह दिखने के लिए होता है। :) यदि ऐप के विभिन्न आंतरिक भाग सीधे प्रदाता के समान डेटाबेस तक पहुंचते हैं, तब तक जब तक दोनों के कोड अच्छी तरह से एक साथ खेलते हैं, तो यह ठीक होना चाहिए।

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

+0

धन्यवाद, और मैं सहमत हूं कि सामग्री प्रदाता का उपयोग केवल पैटर्न को संतुष्ट करने का कोई कारण नहीं होगा। वास्तव में डेटाबेस तक सीधे पहुंचना एक पूरी तरह व्यवहार्य पैटर्न है। कुछ और शोध के बाद, ऐसा लगता है कि ContentProvider कई एपीआई कॉलों में लेन-देन प्रबंधित करने में सक्षम नहीं है जैसे मुझे चाहिए (http://www.mail-archive.com/[email protected]/msg42281.html) मैं कोर एप्लिकेशन के भीतर सीधी पहुंच के साथ रहूंगा और बस जरूरी चीज़ों का पर्दाफाश करने के लिए ContentProvider को जोड़ूंगा। – Mike

0

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

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

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