ইন্ট্রো
এমভিভিএম-এ স্বাভাবিক অনুশীলন হ'ল নির্ভরতা ইঞ্জেকশন (ডিআই) ধারক থেকে সমাধান করে ভিউগুলি তাদের ভিউমোডেলগুলি সন্ধান করে । কনটেইনারটি ভিউ ক্লাসের কোনও উদাহরণ সরবরাহ (সমাধান) করতে বললে এটি স্বয়ংক্রিয়ভাবে ঘটে। ধারক উদ্বুদ্ধ দৃশ্যে ViewModel দেখুন যা ViewModel পরামিতি গ্রহণ করে একটি কন্সট্রাকটর কল করে; এই স্কিমটিকে ইনভার্শন অফ কন্ট্রোল (আইওসি) বলা হয়।
ডিআই এর সুবিধা
এখানে মূল সুবিধাটি হ'ল কনটেইনারটি রান টাইমে কনফিগার করা যেতে পারে যাতে আমরা এটি থেকে অনুরোধ করা প্রকারগুলি কীভাবে সমাধান করতে হয় তার নির্দেশাবলী। এটি আমাদের অ্যাপ্লিকেশনটি আসলে চলার সময় আমরা যে ধরণের (ভিউ এবং ভিউমোডেলস) ব্যবহার করি তা সমাধান করার নির্দেশ দিয়ে বৃহত্তর টেস্টাবিলিটির অনুমতি দেয় তবে অ্যাপ্লিকেশনটির ইউনিট পরীক্ষা চালানোর সময় এটি আলাদাভাবে নির্দেশ দেয়। পরবর্তী ক্ষেত্রে অ্যাপ্লিকেশনটিতে একটি ইউআইও থাকবে না (এটি চলছে না; কেবল পরীক্ষাগুলি রয়েছে) সুতরাং ধারকটি অ্যাপ্লিকেশন চলাকালীন ব্যবহৃত "স্বাভাবিক" ধরণের জায়গায় মককে সমাধান করবে ।
ডিআই থেকে উদ্ভূত সমস্যা
এখন পর্যন্ত আমরা দেখেছি যে ডিআই পদ্ধতির প্রয়োগের উপাদানগুলি তৈরির ক্ষেত্রে একটি বিমূর্ত স্তর যুক্ত করে অ্যাপ্লিকেশনটির জন্য সহজ পরীক্ষারযোগ্যতা মঞ্জুরি দেয়। এই পদ্ধতির সাথে একটি সমস্যা রয়েছে: এটি ভিজ্যুয়াল ডিজাইনারদের সাথে ভাল খেলছে না মাইক্রোসফ্ট এক্সপ্রেশন ব্লেন্ডের মতো ।
সমস্যাটি হ'ল স্বাভাবিক অ্যাপ্লিকেশন চলমান এবং ইউনিট পরীক্ষা উভয় ক্ষেত্রেই, কারও কি ধরণের সমাধান করতে হবে সে সম্পর্কে নির্দেশাবলী সহ ধারক স্থাপন করতে হবে; তদ্ব্যতীত, কাউকে ধারককে ভিউগুলি সমাধান করার জন্য জিজ্ঞাসা করতে হবে যাতে ভিউমোডেলগুলি সেগুলিতে .ুকিয়ে দেওয়া যায়।
তবে ডিজাইনের সময়টিতে আমাদের চলার কোনও কোড নেই । ডিজাইনার আমাদের দর্শনগুলির উদাহরণগুলি তৈরি করতে প্রতিবিম্বটি ব্যবহার করার চেষ্টা করে যার অর্থ:
- যদি ভিউ কনস্ট্রাক্টরের একটি ভিউমোডেল উদাহরণের প্রয়োজন হয় তবে ডিজাইনার এ দৃশ্যটি মোটেও ইনস্ট্যান্ট করতে পারবেন না - এটি কিছু নিয়ন্ত্রিত পদ্ধতিতে ত্রুটি থেকে বেরিয়ে আসবে will
- যদি ভিউটিতে একটি প্যারামিটারহীন নির্মাতা থাকে তবে ভিউটি তাত্ক্ষণিকভাবে চালু করা হবে তবে এটি
DataContext
হবে null
তাই আমরা ডিজাইনারটিতে একটি "খালি" ভিউ পেয়ে যাব - যা খুব কার্যকর নয় is
ভিউমোডেলকোটার প্রবেশ করান
ভিউমোডেললোকেটর এটির মতো ব্যবহৃত অতিরিক্ত বিমূর্ততা:
- ভিউ নিজেই তার সংস্থাগুলির অংশ হিসাবে একটি ভিউমোডেললোকেটর ইনস্ট্যান্ট করে এবং এটির ডেটাবন্টেক্সটি লোকেটারের ভিউমোডেল বৈশিষ্ট্যের সাথে সংযুক্ত করে
- আমরা ডিজাইন মোডে থাকা অবস্থায় কোনওভাবে সনাক্তকারী সনাক্ত করে dete
- যদি নকশা মোডে না থাকে তবে লোকেটার একটি ভিউমোডেল দেয় যা এটি ডিআই কনটেইনার থেকে সমাধান হয়েছে, উপরে বর্ণিত হিসাবে
- যদি ডিজাইনের মোডে থাকে তবে লোকেটার তার নিজস্ব যুক্তি ব্যবহার করে একটি নির্দিষ্ট "ডামি" ভিউমোডেল ফিরিয়ে দেয় (মনে রাখবেন: ডিজাইনের সময় কোনও ধারক নেই!); এই ভিউমোডেলটি সাধারণত ডামি ডেটা সহ প্রিপোপুলেটেড আসে
অবশ্যই এর অর্থ হ'ল ভিউটির সাথে শুরু করতে প্যারামিটারলেস কনস্ট্রাক্টর থাকতে হবে (অন্যথায় ডিজাইনার এটি ইনস্ট্যান্ট করতে সক্ষম হবে না)।
সারসংক্ষেপ
ভিউমোডেলকোয়েটার হ'ল একটি প্রতিমা যা আপনাকে আপনার এমভিভিএম অ্যাপ্লিকেশনটিতে ডিআই-র সুবিধাগুলি রাখতে দেয় এবং ভিজ্যুয়াল ডিজাইনারদের সাথে আপনার কোডটি ভাল খেলতে দেয়। এটিকে কখনও কখনও আপনার অ্যাপ্লিকেশনটির "ব্লেন্ডাবিলিটি" বলা হয় (এক্সপ্রেশন ব্লেন্ডের উল্লেখ করে)।
উপরের হজম করার পরে, এখানে একটি বাস্তব উদাহরণ দেখুন ।
শেষ অবধি, ডেটা টেমপ্লেটগুলি ব্যবহার করা ভিউমোডেলকোটার ব্যবহারের বিকল্প নয়, তবে আপনার ইউআই এর অংশগুলির জন্য সুস্পষ্ট ভিউ / ভিউমোডেল জোড়া ব্যবহার করার বিকল্প। প্রায়শই আপনি দেখতে পাবেন যে ভিউমোডেলের জন্য একটি ভিউ সংজ্ঞা দেওয়ার দরকার নেই কারণ আপনি পরিবর্তে কোনও ডেটা টেমপ্লেট ব্যবহার করতে পারেন।