আমার কাছে এমন একটি অ্যাপ্লিকেশন ফ্রেমওয়ার্ক ডিজাইনের কাজ করা হয়েছে যা প্রতিটি প্রয়োগকে ব্যবহারকারীর ইন্টারফেসের কিছু অংশ কাস্টমাইজ করতে দেয়। এরকম একটি উদাহরণ হ'ল বাস্তবায়ন (এখন থেকে একে ক্লায়েন্ট বলুন) নির্দিষ্ট পর্দার জন্য ফিরে আসার জন্য সংগ্রহ ভিউ সেলগুলি সংজ্ঞায়িত করতে পারে। ফ্রেমওয়ার্কটি সহজেই কোনও অ্যাপ তৈরির জন্য উপযুক্ত অবজেক্টগুলি বিক্রির জন্য দায়ী কারণ আমরা বেশ কয়েকটি অনুরূপ নজির তৈরি করব।
ফ্রেমওয়ার্কটিতে আমার বর্তমান পদ্ধতির একটি সমন্বয় নিয়ামক ডিজাইন করা হয়েছে যা অ্যাপ্লিকেশন জুড়ে সমস্ত উপস্থাপনা এবং বরখাস্ত ইভেন্টগুলির জন্য দায়ী। ডিফল্ট সমন্বয় নিয়ামক ফ্রেমওয়ার্কের ভিতরে সমস্ত ডিফল্ট ভিউ কন্ট্রোলারকে বিক্রেত করে যেগুলি প্রয়োজনীয়ভাবে কনফিগার করা UI সরবরাহ না করেই তাদের প্রাসঙ্গিক কাজ সম্পাদন করে। উদাহরণস্বরূপ: একজন নিয়ামক টেমপ্লেট সেল এবং কোনও বিশেষ কিছু সহ একটি সংগ্রহ ভিউ প্রদর্শন করবে। এই নকশার সুবিধাটি হ'ল এটি নিয়ামকদের মধ্যে সংযোগকে সরিয়ে দেয় এবং কোনও ক্লায়েন্টকে ডিফল্ট সমন্বয়কারীকে ওভাররাইড করতে এবং নির্দিষ্ট কাজের জন্য সম্পূর্ণ নতুন দৃশ্য নিয়ামককে ফেরত দেওয়ার অনুমতি দেয়।
আমার যে সমস্যা হচ্ছে তা হ'ল ক্লায়েন্টকে অ্যাপটিতে নিজের কাস্টম ইউআই যুক্ত করার অনুমতি দেওয়ার জন্য আমার কীভাবে এই কাঠামোটি ডিজাইন করা উচিত।
এক
কাঠামোর জন্য একটি ভিউ ফ্যাক্টরি প্রয়োজন এবং এই দর্শন কারখানাকে সমস্ত প্রাসঙ্গিক দৃষ্টিভঙ্গি বিক্রির জন্য দায়বদ্ধ করুন। সুতরাং, অ্যাপ ডেলিগেটে আমরা প্রয়োগ করতে পারি যে ক্লায়েন্ট উদাহরণস্বরূপ একটি কালেকটিভিউসেলফ্যাক্টরি তৈরি করে এবং ইন্টারফেসটি এমন সমস্ত কক্ষগুলি সংজ্ঞায়িত করে যে কোনও মানানসই শ্রেণীর সরবরাহ করতে হবে। আমি এই নকশার সাথে একটি কোড বেস উত্তরাধিকারসূত্রে পেয়েছি এবং এটি থেকে দূরে সরে গেছে কারণ এটি অনেকটা বিমূর্ত এবং কাস্টমাইজযোগ্য। এটি অ্যাপ্লিকেশনটির প্রতিটি দিকের জন্য প্রচুর পরিমাণে কারখানা নিয়ে এসেছিল এবং প্রতিটি অ্যাপ্লিকেশানের সেটআপের সময়টিতে এটি যুক্ত হয়।
অ্যাপ্রোচ টু
প্রতিটি দর্শন নিয়ামক সাবক্লাসিং হুক বা সেটআপ এপিআই নির্দিষ্ট করে যা এই কাস্টম ইউআই ক্লাসগুলিকে রান সময়ে সংজ্ঞায়িত করার অনুমতি দেয় (ইউআইএসপ্লিটভিউ কনট্রোলার কীভাবে কলকারীদের ভিউকন্ট্রোলার সম্পত্তি ব্যবহার করে নিয়ন্ত্রণকারী সেটআপ করতে দেয়) এর অনুরূপ। এটি করার জন্য প্রতিটি ক্লায়েন্ট কেবল বেস সমন্বয় নিয়ন্ত্রক এবং প্রতিটি নিয়ন্ত্রকের উপস্থাপনায় কেবল সাবক্লাস করবে; নিয়ামকের উপর উপযুক্ত মানগুলি সেট করুন যাতে এটি পছন্দসই UI অর্জন করে। কিছুটা এইরকম
viewController.registerReusableCellsBlock = ^(UICollectionView *collectionView){
//perform custom registration
}
viewController.cellDequeueBlock = ^UICollectionViewCell<SomeProtocol> *(UICollectionView *collectionView,NSIndexPath *indexPath){
//dequeue custom cells
}
বর্তমানে, আমি পুনঃব্যবহারযোগ্যতা প্রচার করতে এবং ভিউকন্ট্রোলার ব্লাটকে প্রতিরোধ করতে পৃথক বস্তুর মধ্যে দেখার জন্য ডেটা উত্স আলাদা করি। এটি কোষের ইন্টারফেসটি কিছুটা শক্ত কিন্তু অসম্ভব বলে সরবরাহ করতে ভিউ কন্ট্রোলারকে সাবক্লাসিং করে তোলে।
পদ্ধতির ঘ
একটি কাঠামো ডিজাইন করার চেষ্টা এবং এর ব্যবহারের প্রত্যাশা করা সম্ভবত এটির একটি খারাপ ধারণা। সেটআপ ব্যয় তুলনামূলকভাবে বেশি হলেও, সর্বোত্তম বিকল্পটি সর্বাধিক নিয়ন্ত্রণের সাথে সাবক্লাসিংয়ের অনুমতি দেওয়া। তারপরে, একবার আমি এটি বেশ কয়েকটি ক্লায়েন্টের জন্য তৈরি করেছি আমি প্যাটার্নগুলি লক্ষ্য করব যেগুলি উত্থিত হবে এবং পথ ধরে অপ্টিমাইজেশন শুরু করবে।
আমি বুঝতে পারি যে আমি কীভাবে এটি কাঠামোর অভ্যন্তরীণ অনুকূলিতকরণ করতে পারি, যার সাথে আমি লড়াই করছি তা হ'ল ক্লায়েন্ট দ্বারা ফ্রেমওয়ার্কের সম্ভাব্য কাস্টমাইজেশন পয়েন্টগুলি সংজ্ঞায়িত এমন ইন্টারফেসকে কীভাবে সেরাভাবে সংজ্ঞা দেওয়া যায়।
টি এল; ডিআর
ইন্টারফেসের সবচেয়ে জটিল অংশটি কালেকশন ভিউ সেলগুলিতে নেস্টেড কালেকশন ভিউ নিয়ে কাজ করে। এটি অনুভূমিক পেজিং এবং কোষগুলির উল্লম্ব স্ক্রোলিংয়ের অনুমতি দেয়। অনুভূমিক কোষ পরিচালনা করে এমন একটি ডেটা উত্স থাকার মাধ্যমে এটি অর্জন করা হয় এবং প্রতিটি কোষের সংগ্রহ ভিউকে একটি নতুন ডেটা উত্স দিয়ে কনফিগার করে।
কীভাবে একটি এমন ইন্টারফেস ডিজাইন করবে যা এই সমস্ত কক্ষকে কাস্টমাইজ করার অনুমতি দেয়?