CoreData बनाम क्षेत्र (स्विफ्ट में)

CoreData से Realm में स्विच करने के बाद, मैंने सोचा कि महत्वपूर्ण अंतरों को नोट करना उपयोगी होगा।

सबसे पहले, मैं Realm के क्लाउड सुविधाओं का उपयोग नहीं कर रहा हूं और संभवतः डेटा को सिंक करने के लिए iCloud का उपयोग करूंगा। यदि आप अपने क्लाउड प्लेटफॉर्म के माध्यम से सिंक करने की आवश्यकता नहीं है, तो मैं मुफ्त सेवाओं का चयन कर रहा हूं और दायरे का उपयोग करने के लिए स्वतंत्र है।

CoreData और Realm दोनों ही किसी प्रकार की दुकान द्वारा समर्थित वास्तविक वस्तुओं को पलटने के लिए ऑब्जेक्टिव-सी आधारित कक्षाओं का उपयोग करते हैं। CoreData डिफ़ॉल्ट रूप से एक sqllite डेटाबेस का उपयोग करता है इसलिए आपको डेटाबेस को हाथ से देखने और संपादित करने के लिए कुछ sqllite टूल की आवश्यकता होगी। दायरे एक मालिकाना प्रारूप का उपयोग करते हैं, लेकिन उनके पास डेटाबेस को देखने और संपादित करने के लिए मैक ऐप स्टोर पर मुफ्त में एक ब्राउज़र उपलब्ध है।

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

एक स्कीमा बनाना भी भिन्न होता है, कोरडाटा का उपयोग करके आप XCode में एक मॉडल बनाते हैं जो डेटा में वस्तुओं को अस्थिर करने के लिए उपयोग की जाने वाली कक्षाएं उत्पन्न करता है। फिर से, Realm सरल है कि आपको ऑब्जेक्ट और मार्क गुणों से विरासत में प्राप्त करना होगा जिसे आप @objc डायनामिक के रूप में संग्रहीत करना चाहते हैं। ऐसे कई कार्य हैं जिन्हें आप अपनी वस्तुओं को बनाए रखने में मदद करने के लिए ओवरराइड कर सकते हैं आदि। मुझे XCode में मॉडल की दृश्य पुनरावृत्ति पसंद है और एक-से-कई और कई-से-कई रिश्तों के साथ काम करना यकीनन आसान है XCode मॉडल संपादक की तुलना में यह Realm में LinkingObjects () कार्यक्षमता का उपयोग करना है।

मुझे लगता है कि एक दायरे की परिभाषा एक तालिका परिभाषा के रूप में है और आप आसानी से realm.objects (MyObject. स्वयं) को कॉल करके एक लाइव परिणाम प्राप्त कर सकते हैं जो पंक्तियों को जोड़ने, हटाए जाने या अपडेट किए जाने के बाद भी जारी रहेगा। आप सेट किए गए परिणामों के लिए विधेय जोड़ सकते हैं ताकि आपको पूर्व-फ़िल्टर किए गए और सॉर्ट किए गए परिणाम मिलें या आप उन्हें किसी सरणी में मैप कर सकें। CoreData में आप इसी तरह की चीजें कर सकते हैं लेकिन फिर से Realm में API सरल है।

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

निष्कर्ष में, कोरडाटा के बारे में पर्याप्त सीखने के कठिन ग्राफ्ट के माध्यम से इसका उपयोग करने के लिए, मैं कुछ और करने के लिए स्विच करने के लिए अनिच्छुक था, लेकिन यह वास्तव में सापेक्षता की सादगी और तथ्य यह है कि सिम्युलेटर को बार-बार लॉन्च करने और छोड़ने के दौरान यह थोड़ा अधिक अनुकूल है। इसका मतलब है कि मैं CoreData पर दायरे का उपयोग करने की सलाह दूंगा।