2012-12-14 29 views
5

मैं वर्तमान में पार्स और मैं का उपयोग करके ऐप्लिकेशन के विकास कर रहा हूँ उनके एसडीके सार संक्षेप शुरू करने के लिए के रूप में मैं नहीं जानता चाहते हैं, तो और जब मैं जा रहा हूँ अन्य बैकएंड को अन्य प्रदाता द्वारा या हमारे द्वारा प्रतिस्थापित करें।BeaaS के लिए एक आवरण (पार्स/Stackmob/...) बनाना

एक और प्रेरणा के मुद्दों को अलग किया जाता है: जब मैं बस किसी भी बैकएंड विशेष जानकारी के लिए ढांचे को अपडेट कर सकते मेरे सभी क्षुधा कोड एक ही ढांचे का उपयोग करेगा।

मैंने अपनी मुख्य कक्षाओं को बदलने के लिए कुछ सामान्य वर्ग बनाकर शुरू किया है। यह सामान्य वर्ग प्रोटोकॉल को परिभाषित करते हैं कि प्रत्येक एडाप्टर को कार्यान्वित करना होगा। तब मेरे पास एक पार्स एडाप्टर होगा जो कॉल को एसडीके पर अग्रेषित करेगा।

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

मैं Stackmob साथ अब तक वास्तव में कभी नहीं चला गया गया है के रूप में मैं पार्स साथ हूँ तो मैं पहले संस्करण लगता पार्स की अपनी वास्तुकला साझा करेंगे।

  • इस तरह के कुछ के लिए सर्वोत्तम अभ्यास क्या हैं?
  • क्या वहां ऐसा कुछ है? मैंने पहले ही सफलता के बिना खोज की है लेकिन शायद मैं गलत दिशा में देख रहा हूं;
  • मैं पार्स एसडीके बस सुनिश्चित करने के साथ रहना चाहिए कि कोड यह अच्छी तरह से पहचान की है और निहित है का उपयोग कर?

उत्तर

3

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

क्या वहां ऐसा कुछ है? मैं पहले से ही सफलता के बिना खोज की है, लेकिन शायद मैं गलत दिशा में देख रहा हूँ

जबकि वहाँ वहाँ बाहर अन्य BAAS प्रदाताओं कि इसी तरह की और फर्क सुविधाओं प्रदान कर रहे हैं, मैं नहीं एक उत्पाद के बारे में पता वहाँ बाहर है कि पूरी तरह से कर रहा हूँ एक अज्ञेय तरीके से तीसरे पक्ष के प्रदाताओं को छोड़ देता है।

कुछ इस तरह के लिए सर्वोत्तम प्रथाओं क्या हैं?

मुझे लगता है कि आप सही दिशा में शुरू करने के लिए पहले से ही ठोस पैर पर दिख रहे हैं।

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

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

फिर, मैं संभवतः प्रत्येक वर्ग को BaseObject कक्षा से प्राप्त कर दूंगा, जिसमें वास्तव में डेटा बैकएंड (प्रदाता-आधारित या मेरा स्वयं का कस्टम रिमोट बैकएंड) से बात की जाने वाली विधियां शामिल होंगी। BaseObject वर्ग की तरह हो सकता है तरीकों saveObject, getById:, getObjects (खोज/वस्तु को छानने के प्रदर्शन के लिए कुछ उचित मानकों के साथ)। तब, जब मैं भविष्य में अपने बैकएंड डेटा सेवा बदलना चाहते हैं, मैं केवल BaseObject वर्ग तरीकों कि डेटा बातचीत संभाल, सभी मेरे ऐप तर्क & कार्यक्षमता Foo, Bar से जुड़ा हुआ है, जबकि अद्यतन करने पर ध्यान केंद्रित करना होगा, और Baz कक्षाओं, और वास्तव में परवाह नहीं है कि दृश्यों के पीछे संचालन कैसे काम/सहेजें/अद्यतन/हटाएं।

अब, संभव के रूप में अपने आप पर आसान के रूप में चीजों को रखने के लिए, मैं अपने BAAS स्कीमा बाहर का निर्माण होता है आंतरिक वस्तु वर्ग नाम से मेल करने (जहां, BAAS आवश्यकताओं के आधार पर, मैं इस्तेमाल कर सकते हैं या तो एक isKindOfClass: या NSStringFromClass: कॉल)। इसका मतलब यह है कि अगर मैं पार्स उपयोग कर रहा था, मैं अपने save विधि डेटा कार्रवाई करने के लिए वर्ग के नाम की NSStringFromClass: मिल बनाना चाहते चाहते हैं। अगर मैं Applicasa की तरह एक सेवा है, जो डेटा बातचीत के लिए देशी वस्तुओं की एक कस्टम एसडीके उत्पन्न उपयोग कर रहा था, मैं पर isKindOfClass: परिणाम कस्टम डेटा कार्यों के आधार के लिए चाहते हैं। अगर मैं और से अधिक लचीलापन चाहता हूं (शायद कई बैकएंड प्रदाताओं का उपयोग करने की अनुमति देने के लिए, या कुछ अन्य जटिल आवश्यकताएं), तो मैं सभी बच्चों की कक्षाओं को BaseObject बताऊंगा कि किसी प्रकार के माध्यम से डेटा संचालन के लिए किस स्कीमा नाम का उपयोग करना है कस्टम विधि का, जैसे getSchemaName। मैं शायद इसे BaseObject विधि के रूप में परिभाषित करता हूं जो क्लास नाम को डिफ़ॉल्ट रूप से स्ट्रिंग के रूप में वापस कर देगा, लेकिन फिर आगे अनुकूलित करने के लिए बाल कक्षाओं पर लागू होगा।

- (BOOL) save { 
    // call backend-specific method for saving an object 
    BaasProviderObject *objectToSave = [BaasProviderObject 
             objectWithClassName:[self getSchemaName]]; 

    // Transfer all object properties to BaasProviderObject properties 
    // Implement however it makes the most sense for BaasProvider 

    // After you've set all calling object properties to BaasProviderObject 
    // key-value pairs or object properties, you call the BaasProvider's save 
    [objectToSave save]; 

    // Return a BOOL value to indicate actual success/failure 
    return YES; // you'll want this to come from BaaS 
} 
तब में, कहते हैं

, Foo वर्ग, मैं इतना की तरह getSchemaName लागू हो सकता है:: तो, एक BaseObjectsave विधि के अंदर कुछ इस तरह लग सकता है

- (NSString) getSchemaName { 
    // Return a custom NSString for BaasProvider schema 
    return @"dbFoo"; 
} 

मुझे आशा है कि समझ में आता है ।

क्या मुझे पर्स एसडीके के साथ रहना चाहिए ताकि यह सुनिश्चित हो सके कि इसका उपयोग करने वाला कोड अच्छी तरह से पहचाना और निहित है?

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

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

अच्छा धन्यवाद। इससे मेरे दिमाग में कुछ चीजें साफ हो गईं। मैं इसे नीचे के दृष्टिकोण में देख रहा था, इस बारे में सोच रहा हूं कि मेरे बाएएस प्रदाता को कैसे एन्कापुलेट करना है, इस पर ध्यान दिए बिना कि मैं जिस ऐप का निर्माण कर रहा हूं। आपका दृष्टिकोण मुझे दो मामलों के अलगाव में सुधार करने की इजाजत देता है जबकि बहुत अधिक काम नहीं कर रहा है। –

1

मैं स्टैकमोब में प्लेटफार्म प्रचारक हूं और सोचा कि मैं इस प्रश्न पर चिंतित हूं। हमने कोर डेटा इंटरफ़ेस के साथ हमारे आईओएस एसडीके का निर्माण किया। आप नियमित कोर डेटा का उपयोग करेंगे और हमने SQLLite के बजाय StackMob पर बने रहने के लिए NSIncremental Store को ओवरराइड कर दिया है।

आप कोर डेटा कोड का एक उदाहरण चेकआउट कर सकते हैं।
http://developer.stackmob.com/tutorials/ios/Create-an-Object

आप देखते हैं कि क्या तरीकों कोर डाटा द्वारा आपूर्तित किया जा रहा है StackMob साथ बातचीत करना चाहते हैं। http://developer.stackmob.com/tutorials/ios/Lower-Level-CRUD-API