ম্যাসিভ ভিউ কন্ট্রোলার - আইওএস - সমাধান


16

আমি নিশ্চিত যে প্রতি নতুন আইওএস বিকাশকারীকে নিম্নলিখিত সমস্যা রয়েছে: দেখুন কন্ট্রোলাররা খুব সহজেই বিভিন্ন উদ্দেশ্যে কোড সহ ভিড় করে, সহজেই 500 + কোডের লাইন পান।

এটি দুটি প্রাথমিক এবং সাধারণ পর্দার জন্য দেখতে দেখতে এটি:

1) ফর্ম স্ক্রিন: এখানে চিত্র বর্ণনা লিখুন

2) টেবিল ভিউ কন্ট্রোলার স্ক্রিন এখানে চিত্র বর্ণনা লিখুন

এখন পর্যন্ত আমি প্রায় দুটি ভিন্ন সমাধান পড়েছি:

  1. প্রথম সমাধান: https://bendyworks.com/single- দায়িত্বজ্ঞানহীনতা- নীতি- নীতিমালা- । এটি নোটিফিকেশনের উপর ভিত্তি করে, ভিউ কন্ট্রোলারটিকে (ইনটেনশন) ভিউ মডেল থেকে সম্পূর্ণ পৃথক করে এবং এভাবে ভিউ কন্ট্রোলারে কোড হ্রাস করে। আমি মনে করি এটিতে গো-টু কাঠামোগুলির মতো ব্রেকিং কোডের ডাউনসাইড রয়েছে। দেখে মনে হচ্ছে: এখানে চিত্র বর্ণনা লিখুন

  2. দ্বিতীয় সমাধান একই ভিড়যুক্ত ভিউ কন্ট্রোলারদের রাখে (বোতামের ক্রিয়াগুলি ভিসির অভ্যন্তরে কার্যকর করা হয় এবং ততক্ষণ)। তবে টিপিকেয়ারবোর্ডে চালিত ব্লককিট বা অন্যান্য সমাধানগুলির মতো লাইব্রেরি ব্যবহার করে যার বেশিরভাগ বিভাগের উপর ভিত্তি করে। এই দ্বিতীয় সমাধানের সাহায্যে কোডটি মারাত্মকভাবে হ্রাস করা হয়েছে তবে ভিউ কন্ট্রোলারের এখনও অনেক বেশি দায়বদ্ধতা রয়েছে।

এই সমাধানগুলি সম্পর্কে আপনার কী ধারণা? কোনটা ভাল? এর চেয়ে ভাল আর কি আছে?


5
সময়ের কারণে আমি একটি ভাল উত্তর দিতে পারি না, তবে এটি আপনাকে সঠিক দিকে নির্দেশ করবে।
মাইক ডি

আমার উদ্দেশ্য হ'ল শেষ পর্যন্ত এত নতুন নতুন বিকাশকারীদের এই সমস্যাটি কাটিয়ে উঠতে যতটা সম্ভব ভাল উত্তর সংগ্রহ করা। লিঙ্কটির জন্য ধন্যবাদ, আমি যদি নতুন কিছু খুঁজে পাই তবে আমি অবশ্যই এটি এখানে পোস্ট করব।
রাভুল

এখানে অ্যান্ডি Matuschak দ্বারা চর্বি দৃশ্য কন্ট্রোলার সঙ্গে যুদ্ধ সম্পর্কে একটি দুর্দান্ত আলাপ এর https://realm.io/news/andy-matuschak-refactor-mega-controller/
Tomasz Bak

উত্তর:


6

আমরা এই সমস্যাটি সমাধান করতে এমভিভিএম ব্যবহার করতে পারি।

মডেল-ভিউ-ভিডমোডেল বা এমভিভিএম প্যাটার্নটি এটি সাধারণভাবে পরিচিত, এটি একটি ইউআই ডিজাইনের ধরণ। ভিসি থেকে ইউআইয়ের জন্য মডেল ডেটা প্রস্তুত করার জন্য সমস্ত যুক্তি গ্রহণ করে ভিএম।

উদাহরণ:
আপনি কয়েকটি ক্ষেত্রের সাথে মডেল অবজেক্ট পেয়েছেন, আপনি সেগুলির কয়েকটি ফর্ম্যাট করতে চান, গণনা তৈরি করতে এবং তাদের একত্রিত করতে চান।

এমভিসি ক্ষেত্রে ভিউকন্ট্রোলারে থাকা সমস্ত যুক্তি।
এমভিভিএম-এ আপনি এটির সমস্তটি ভিসি থেকে ভিজিমে স্থানান্তরিত করেন।

ভিএম সমস্ত তথ্য ইউআই এর জন্য প্রস্তুত করবে এবং ভিসি ঠিক এটির মতো সেট করে।

(ভিসি ক্লাসে)

self.descriptionLabel = self.viewModel.textForDescriptionLabel;

টিউটোরিয়াল এবং বিষয়:


3
যদিও এটি তাত্ত্বিকভাবে প্রশ্নের উত্তর দিতে পারে, উত্তরটির প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্ক সরবরাহ করা ভাল।
বার্ট ভ্যান ইনজেন শেহেনো

আমি বার্টের সাথে একমত অন্য কেউ যদি এই সমস্ত পদ্ধতির সংক্ষিপ্ত বিবরণ পোস্ট না করেন তবে আমি সমস্তগুলি বুঝতে এবং পরীক্ষা করার সাথে সাথে এটি তৈরি করব।
রাভুল

2
@ রাভুল আপডেট উত্তর
ক্যাস্পার্টাস

আমি আপনার উত্তরটি ভোট দিয়েছি এবং এই ধারণার জন্য আপনাকে ধন্যবাদ। আমি কেবল ফাংশনাল প্রতিক্রিয়াশীল প্রোগ্রামিং সম্পর্কে পড়ছি এবং এটি একটি ভাল ধারণা বলে মনে হচ্ছে। আমি মনে করি এই প্রশ্নের উত্তরটি একটি গণনা, কয়েকটি সুবিধা, অসুবিধাগুলি এবং কমপক্ষে একটি ধারণামূলক ডায়াগ্রামের সাথে নিম্নলিখিত 4 টি সমস্যার সাথে যোগাযোগ করার উপায় রয়েছে: 1) প্রতিক্রিয়াশীল কোকো 2) কেভিও 3) প্রতিনিধি পদ্ধতি এবং 4) ক্লাসিকাল উপায় একটি ভিউ কন্ট্রোলার লিখছি। আমার আগে অন্য কেউ যদি এটি না করে তবে আমি এই সমস্ত পদ্ধতি পরীক্ষা করার সাথে সাথে এটি লিখব। এর মধ্যে যদি আমি নতুন উপায়গুলি খুঁজে পাই তবে এটি আরও ভাল।
রাভুল

3

এর আগে আমাকে বিশাল আকারের ভিউ কন্ট্রোলারগুলির কোড আনট্যাগল করতে হয়েছিল এবং এটি প্রথমে আমার সামগ্রীতে নেভিগেট করার ক্ষমতাকে বাধা দিয়েছে। একটি গুরুত্বপূর্ণ বিষয় যা আমি বুঝতে পেরেছি তা হল যে একা ভিউ কন্ট্রোলারের আকারগুলি জিনিসগুলি ছিন্ন করার পক্ষে যথেষ্ট কারণ ছিল না। 1 টি বৃহত ফাইল থাকার ক্ষেত্রে জটিলতা রয়েছে এবং অল্প সংখ্যক ছোট ফাইল থাকার ক্ষেত্রেও জটিলতা রয়েছে। এখানে একটি নিয়ন্ত্রণ কন্ট্রোলারকে ছোট অংশে ভাঙ্গতে রিফ্যাক্টরের কয়েকটি বৈধ কারণ রয়েছে:

MVC

ভিউ কন্ট্রোলারটি ভিউ এবং মডেলের মধ্যে সংযোগ আঠালো হওয়ার চেয়ে বেশি কিছু করা উচিত নয়। যদি আপনি প্রচুর নেটওয়ার্ক সংযোগ কোড, চিত্র ম্যানিপুলেশন কোড, ইত্যাদি, তবে সেগুলিকে সহায়ক শ্রেণিতে বিভক্ত করার বিষয়টি বিবেচনা করুন।

ডেটা উত্স হিসাবে ভিউ কন্ট্রোলারের সাথে একাধিক নিয়ন্ত্রণ

আপনার যদি স্ক্রিনে এমন একাধিক নিয়ন্ত্রণ থাকে যা আপনার ডেটা উত্স হিসাবে কনট্রোলার থাকে তবে পৃথক ডেটা উত্স অবজেক্টে এগুলি ভাঙ্গার বিবেচনা করুন এবং সেগুলি ডেটা উত্স হতে হবে। অথবা আপনি এগুলিকে পৃথক ভিউ কন্ট্রোলারগুলিতেও ভাঙ্গতে পারেন (যেমন আপনি যদি দেখেন যে অন্যান্য নিয়ামক ছাড়াও কন্ট্রোলারের একটি টেবিল ভিউ থাকে, তবে আপনি এটির নিজস্ব টেবিল ভিউ নিয়ন্ত্রক শ্রেণিতে বিভক্ত করতে পারেন)।

সদৃশ কোড

আপনার যদি ভিন্ন ভিউ কন্ট্রোলারগুলিতে ঠিক একই কোড থাকে তবে সেটিকে 1 ভাগ করা স্থানে রাখুন। এটি আপনার কোডটিকে পুনরায় ব্যবহারযোগ্য করে তুলবে এবং জটিলতা পরিচালনা করতে সহায়তা করবে।

নিয়ন্ত্রক জটিলতা হ্রাস করতে এখানে কিছু অতিরিক্ত পরামর্শ দেওয়া হয়েছে:

প্রোগ্রামেটিকের পরিবর্তে স্টোরিবোর্ড

ভিউ এলিমেন্ট তৈরি করা অনেকগুলি কোড এবং ফ্রেমের জ্যামিতি কোডটিও অনেক কাজ। যদি না ইতিমধ্যে অটো লেআউট সীমাবদ্ধতাগুলি ব্যবহার করে এবং যতটা সম্ভব স্টোরিবোর্ডে ভিউ উপাদানগুলির বেশি রাখার বিষয়টি বিবেচনা না করে।

অপ্রয়োজনীয় কোড / মন্তব্য

অপ্রয়োজনীয় কোড / মন্তব্যগুলি সরাতে ভুলবেন না। আপনি যে পদ্ধতিগুলি ব্যবহার করছেন না তার সাথে একটি নতুন ভিউ কন্ট্রোলার ফাইলটি অনেক সময় আসবে। আপনি যদি কোনও পদ্ধতি ব্যবহার না করে থাকেন didReceiveMemoryWarningতবে এটি ব্যবহার করা নিরাপদ। এছাড়াও, ভিউ কন্ট্রোলার ফাইলটি কখনও কখনও এত বড় হওয়ায় এটি পুরানো কোড বা মন্তব্যগুলি সরিয়ে ফেলার ভয়ঙ্কর। বন্ধ না! এটি কেবল জটিলতায় যোগ করে।

বিজ্ঞপ্তিগুলি

বিজ্ঞপ্তিগুলি সম্পর্কে আপনার প্রশ্নের উত্তর দেওয়ার জন্য: বিজ্ঞপ্তিগুলি সমস্ত কিছুর সাথে ব্যবহার করার জন্য কোনও গোল্ডেন হ্যামার নয়। 1 টি বিশেষ ক্রমের কারণে যখন একাধিক ভিউ কন্ট্রোলারকে একই সময়ে আপডেট করা দরকার তখন আমি দরকারী হতে বিজ্ঞপ্তিগুলি পেয়েছি। বিজ্ঞপ্তিগুলি সম্পর্কে সতর্ক থাকুন, এগুলি অতিরিক্ত ব্যবহারের কারণে সেগুলি ট্র্যাক করার চেষ্টা করে আপনার প্রচুর ব্যথা হতে পারে।


2

তারা ভিআইপিআর (ভিউ, ইন্টারেক্টর, উপস্থাপক, সত্তা এবং রাউটিং) নামে একটি বিশেষ আর্কিটেকচার রয়েছে। আপনার যা জানা দরকার তা আমি এখানে আবার চেষ্টা করব:

দৃশ্য

  • তারা ডামি ভিউ;
  • ইউআইভিউ, ইউআইভিউ কনট্রোলার, ইউআইএলবেল ইত্যাদির মতো অবজেক্টগুলিতে থাকে;
  • উপস্থাপক থেকে সামগ্রী অপেক্ষায় ;
  • ব্যবহারকারীর মিথস্ক্রিয়া পরিচালনা এবং এটি উপস্থাপক স্তরে পাস ।

উপস্থাপকের

  • ইউআই অবজেক্টস জানে না;
  • ভিউ স্তর থেকে ইনপুট পান ;
  • ভিউ লজিক হ্যান্ডেল করুন (অ্যাড পদ্ধতিটি অন্যান্য স্ক্রিন উপস্থাপন করবে);

রাউটিং

  • নেভিগেশন যুক্তি এবং ট্রানজিশন অ্যানিমেশন পরিচালনা করুন;
  • ইউআইএনএভিগেশন কন্ট্রোলার, ইউআই উইন্ডো ইত্যাদির মতো জিনিসগুলি জানে;

সুতরাং, আমি কী মনে করি আপনি নিজের কোডে পরিষ্কার করবেন:

  • ডেটা বৈধতা উপস্থাপক স্তরে চলে যাবে;

  • নেভিগেশন ওয়্যারফ্রেমে অবজেক্টগুলিতে স্থানান্তরিত হবে ( রাউটিং স্তর);

  • DRY নীতি পর্যবেক্ষণ করে আপনার ভিউ কন্ট্রোলারকে বিভক্ত করুন ;

  • কমপ্লেক্স স্ক্রিনগুলিতে দুটি বা আরও বেশি ভিউ এবং উপস্থাপক থাকবে।

আপনি Viper স্থাপত্য সম্পর্কে লিঙ্কটি অনুসরণ করুন দেখতে পাবেন http://mutualmobile.github.io/blog/2013/12/04/viper-introduction/

ভাল কপাল!


1
এই স্থাপত্যটি কি ছোট অ্যাপ্লিকেশনগুলির জন্য কাজ করে? দেখে মনে হচ্ছে আপনাকে প্রকল্পের সাথে পরিচয় করানোর জন্য প্রচুর অবজেক্ট তৈরি করতে হবে।
টমাসজ বেক

হ্যাঁ, আমি সম্মত হই যে এটি traditionalতিহ্যবাহী এমভিসি থেকে বেশি অবজেক্ট তবে এটি মূল্যবান। আপনি এই বছরে তৈরি একটি সাধারণ উদাহরণ github.com/orafaelreis/cascavel দেখতে পাচ্ছেন প্রকল্পগুলি আরম্ভ করার জন্য বেস প্রকল্পের মতো।
ওরাফেরিস

দুর্দান্ত! ভিআইপিআইআর আর্কিটেকচারটি বিশাল ভিউ কন্ট্রোলারদের সমস্যা এড়াতে ঠিক নকশা করা হয়েছে বলে মনে হয়।
ক্রিস্টোফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.