আরে, আমি এখানে আমাদের অ্যাপের জন্য মডেল স্তরের উপর কাজ করছি।
প্রয়োজনীয়তাগুলির কয়েকটি হ'ল:
- এটি আইফোন ওএস 3.0+ এ কাজ করা উচিত।
- আমাদের ডেটার উত্সটি একটি রেস্টলফুল রেল অ্যাপ্লিকেশন।
- কোর ডেটা ব্যবহার করে আমাদের স্থানীয়ভাবে ডেটা ক্যাশে করা উচিত।
- ক্লায়েন্ট কোড (আমাদের ইউআই কন্ট্রোলারদের) যেকোন নেটওয়ার্ক স্টাফ সম্পর্কে যথাসম্ভব কম জ্ঞান থাকা উচিত এবং কোর ডেটা এপিআই দিয়ে মডেলটিকে কোয়েরি / আপডেট করা উচিত।
আমি সার্ভার-চালিত ব্যবহারকারী অভিজ্ঞতা তৈরির বিষয়ে ডাব্লুডাব্লুডিসি 10 সেশন 117 পরীক্ষা করে দেখেছি , উদ্দেশ্য উত্স , কোর রিসোর্স এবং রেস্টফুলকোরডাটা ফ্রেমওয়ার্কগুলি পরীক্ষা করে কিছু সময় ব্যয় করেছি ।
অবজেক্টিভ রিসোর্স ফ্রেমওয়ার্কটি নিজস্ব ডেটাতে নিজস্ব ডেটাতে কথা বলে না এবং এটি কেবলমাত্র একটি ক্লায়েন্টের বাস্তবায়ন। কোর রিসোর্স এবং রেস্টফুলকোরডেটা সমস্ত ধরে নেয় আপনি আপনার কোডে কোর ডেটার সাথে কথা বলেছেন এবং তারা মডেল স্তরের পটভূমিতে সমস্ত বাদাম এবং বল্টগুলি সমাধান করে।
এখন পর্যন্ত সমস্ত কিছু ঠিক আছে এবং প্রাথমিকভাবে আমি যদিও কোর রিসোর্স বা রেস্টফুলকোরডাটা উপরের সমস্ত প্রয়োজনীয়তা কভার করব তবে ... এখানে দুটি জিনিস রয়েছে যাগুলির মধ্যে কোনওটিই সঠিকভাবে সমাধান করার জন্য ঘটেনি বলে মনে হচ্ছে:
- সার্ভারে স্থানীয় আপডেটগুলি সংরক্ষণ করার সময় মূল থ্রেডটি ব্লক করা উচিত নয়।
- যদি সংরক্ষণ অপারেশন ব্যর্থ হয় তবে ত্রুটিটি ইউআইতে প্রচার করা উচিত এবং স্থানীয় কোর ডেটা স্টোরেজে কোনও পরিবর্তন সংরক্ষণ করা উচিত নয়।
কোর রিসোর্স যখন আপনি কল করবেন তখন সার্ভারে এর সমস্ত অনুরোধ জারি করার জন্য ঘটে - (BOOL)save:(NSError **)error
আপনার পরিচালিত অবজেক্ট কনটেক্সটটিতে করেন তখন কোর্স এবং তাই সার্ভারের অন্তর্নিহিত অনুরোধগুলির একটি সঠিক এনএসিররর উদাহরণ সরবরাহ করতে সক্ষম হয় যাতে কোনওভাবে ব্যর্থ হয়। তবে সেভ অপারেশন শেষ না হওয়া অবধি কলিং থ্রেডটিকে অবরুদ্ধ করে। ব্যর্থ
রেস্টফুলকোরডাটা আপনার -save:
কলগুলি অক্ষত রাখে এবং ক্লায়েন্ট থ্রেডের জন্য কোনও অতিরিক্ত প্রতীক্ষার সময় প্রবর্তন করে না। এটি কেবলমাত্র সন্ধান করে NSManagedObjectContextDidSaveNotification
এবং তারপরে বিজ্ঞপ্তি হ্যান্ডলারে সার্ভারের সাথে সম্পর্কিত অনুরোধগুলি জারি করে। তবে এইভাবে -save:
কলটি সর্বদা সফলভাবে সম্পন্ন হয় (ভাল, প্রদত্ত কোর ডেটা সংরক্ষিত পরিবর্তনের সাথে ঠিক আছে) এবং ক্লায়েন্ট কোড যা আসলে এটি বলেছিল সেভটি জানার কোনও উপায় নেই কারণ কিছু 404
বা কারণে সার্ভারে প্রচার করতে ব্যর্থ হয়েছে or421
বা যে সার্ভার-সাইড ত্রুটি ঘটেছে। এবং আরও বেশি, স্থানীয় স্টোরেজ ডেটা আপডেট করার জন্য পরিণত হয়, তবে সার্ভারটি কখনই পরিবর্তনগুলি সম্পর্কে জানে না। ব্যর্থ
সুতরাং, আমি এই সমস্ত সমস্যার সাথে মোকাবিলা করার একটি সম্ভাব্য সমাধান / সাধারণ অনুশীলনগুলির সন্ধান করছি:
- আমি চাই না যে প্রতিটিটিতে কলিং থ্রেডটি ব্লক হয়ে যায়
-save:
নেটওয়ার্কের অনুরোধগুলি হওয়ার সময় আমি কলটিতে । - আমি কোনওভাবে ইউআই-তে বিজ্ঞপ্তি পেতে চাই যে কিছু সিঙ্ক ক্রিয়াকলাপটি ভুল হয়েছে।
- আমি চাই সার্ভারের অনুরোধ ব্যর্থ হলে প্রকৃত কোর ডেটা সংরক্ষণও ব্যর্থ।
কোন ধারনা?