স্ট্যান্ডার্ড "মডেল ভিউ কন্ট্রোলার" প্যাটার্ন এবং মাইক্রোসফ্টের মডেল / ভিউ / ভিউমোডেল প্যাটার্নের মধ্যে কি পার্থক্য রয়েছে?
স্ট্যান্ডার্ড "মডেল ভিউ কন্ট্রোলার" প্যাটার্ন এবং মাইক্রোসফ্টের মডেল / ভিউ / ভিউমোডেল প্যাটার্নের মধ্যে কি পার্থক্য রয়েছে?
উত্তর:
দুটি প্যাটার্নগুলি এএসপি. নেট এবং সিলভারলাইট / ডাব্লুপিএফ বিকাশ উভয় ক্ষেত্রে বিভিন্ন উপায়ে ক্রপ হয়।
এএসপি.নেটের জন্য, এমভিভিএম অভ্যস্ত দর্শনগুলির মধ্যে দ্বি-মুখী বাঁধাই । এটি সাধারণত ক্লায়েন্ট-পার্শ্ব বাস্তবায়ন (যেমন নকআউট.জেএস ব্যবহার করে)। অন্যদিকে এমভিসি হ'ল সার্ভার-সাইডে উদ্বেগগুলি পৃথক করার একটি উপায় ।
সিলভারলাইট এবং ডাব্লুপিএফের জন্য, এমভিভিএম প্যাটার্নটি আরও পরিবেষ্টিত এবং উপস্থিত হতে পারে এমভিসি (অথবা সফ্টওয়্যারকে আলাদা দায়িত্বের মধ্যে পৃথক দায়িত্ব পালনের ব্যবস্থা করার) হিসাবে প্রতিস্থাপন হিসাবে কাজ । এক ধৃষ্টতা যে ঘন ঘন এই প্যাটার্ন বেরিয়ে আসেন, যে ছিল ViewModel
কেবলমাত্র নিয়ামক প্রতিস্থাপিত MVC
(যেন আপনি শুধু প্রতিস্থাপন পারে VM
জন্য C
আদ্যক্ষরা এবং সব ক্ষমা করা হবে) ...
সমস্যাটি হ'ল: স্বতন্ত্রভাবে টেস্টযোগ্য *, এবং বিশেষত যখন প্রয়োজন হয় তখন পুনরায় ব্যবহারযোগ্য, একটি ভিউ-মডেল কোন দৃষ্টিভঙ্গি প্রদর্শন করে তা কোনও ধারণা রাখে না, তবে আরও গুরুত্বপূর্ণ ly কোনও ধারণা রাখে তার ডেটাটি কোথা থেকে আসে নয় ।
* দ্রষ্টব্য: অনুশীলনে কন্ট্রোলাররা ভিউমোডেল থেকে বেশিরভাগ যুক্তি সরিয়ে দেয়, যার ইউনিট পরীক্ষার প্রয়োজন। ভিএম এর পরে বোবা পাত্রে পরিণত হয় যার পরীক্ষার জন্য খুব কম প্রয়োজন। এটি একটি ভাল জিনিস যেহেতু ভিএম ডিজাইনার এবং কোডারের মধ্যে কেবল একটি সেতু, তাই সহজ রাখা উচিত।
এমনকি এমভিভিএম-এ, নিয়ামকরা সাধারণত সমস্ত প্রসেসিং যুক্তি ধারণ করে এবং কোন ডেটা প্রদর্শন করতে হবে তা কোন সিদ্ধান্তে কোন মডেল ব্যবহার করে তা প্রদর্শন করবে।
আমরা এখন পর্যন্ত যা দেখেছি সেখান থেকে এক্সএএমএল কোড-পেছন থেকে কোড সরানোর জন্য ভিউমোডেল প্যাটার্নটির মূল সুবিধা এক্সএএমএল সম্পাদনাটিকে আরও স্বতন্ত্র একটি কাজ করার জন্য এক্সএএমএল । আমরা এখনও আমাদের অ্যাপ্লিকেশনগুলির সামগ্রিক যুক্তি নিয়ন্ত্রণ করতে (যখন কোনও পাং উদ্দেশ্য নয়) নিয়ন্ত্রণ করার জন্য নিয়ন্ত্রক তৈরি করি।
আমরা আরও লক্ষ করেছি যে ভাস্কর্য কোড-জেন ফ্রেমওয়ার্কটি এমভিভিএম এবং প্রিজমের অনুরূপ একটি প্যাটার্ন প্রয়োগ করে এবং এটি সমস্ত ব্যবহারের ক্ষেত্রে যুক্তি পৃথক করতে নিয়ন্ত্রণকারীদের বিস্তৃত ব্যবহার করে।
আমি এই বিষয়টিতে একটি ব্লগ শুরু করেছি যা আমি যখন করতে পারি তখন যুক্ত করব । সাধারণ নেভিগেশন সিস্টেমগুলির সাথে এমভিসিভিএম সংযুক্ত করার বিষয়ে সমস্যা রয়েছে, কারণ বেশিরভাগ নেভিগেশন সিস্টেমগুলি কেবলমাত্র ভিউ এবং ভিএম ব্যবহার করে, তবে আমি পরবর্তী নিবন্ধগুলিতে এটিতে যাব।
এমভিসিভিএম মডেল ব্যবহারের অতিরিক্ত সুবিধা হ'ল অ্যাপ্লিকেশনের জীবনযাত্রার জন্য কেবলমাত্র নিয়ামক সামগ্রীর মেমরির অস্তিত্ব থাকা দরকার এবং নিয়ামকদের মূলত কোড এবং সামান্য রাষ্ট্রীয় ডেটা থাকে (অর্থাত্ ক্ষুদ্র মেমরির ওভারহেড) থাকে। এটি এমন সমাধানগুলির তুলনায় অনেক কম স্মৃতি-নিবিড় অ্যাপ্লিকেশন তৈরি করে যেখানে ভিউ-মডেলগুলি ধরে রাখতে হবে এবং এটি নির্দিষ্ট ধরণের মোবাইল বিকাশের জন্য আদর্শ (যেমন উইন্ডোজ মোবাইল সিলভারলাইট / প্রিজম / এমইএফ ব্যবহার করে)। এটি অবশ্যই অ্যাপ্লিকেশনটির ধরণের উপর নির্ভর করে কারণ আপনাকে এখনও সাড়া দেওয়ার জন্য মাঝে মাঝে ক্যাশেড ভিএম রাখতে হবে s
দ্রষ্টব্য: এই পোস্টটি বহুবার সম্পাদনা করা হয়েছে, এবং জিজ্ঞাসা করা সরু প্রশ্নটিকে বিশেষভাবে লক্ষ্যবস্তু করা হয়নি, তাই আমি এখন এটি কভার করার জন্য প্রথম অংশটি আপডেট করেছি। নীচের মন্তব্যে বেশিরভাগ আলোচনা কেবল এএসপি.নেটের সাথে সম্পর্কিত এবং বিস্তৃত চিত্রের সাথে নয়। এই পোস্টটি সিলভারলাইট, ডাব্লুপিএফ এবং এএসপি.নেটে এমভিভিএমের বিস্তৃত ব্যবহারকে কভার করার এবং ভিউমোডেলগুলি দিয়ে নিয়ন্ত্রণকারীদের প্রতিস্থাপন থেকে লোকদের নিরুৎসাহিত করার চেষ্টা করার উদ্দেশ্যে তৈরি হয়েছিল।
আমি মনে করি এই সংক্ষিপ্ত শব্দগুলির অর্থ কী বোঝার তা বোঝার সবচেয়ে সহজ উপায় হ'ল এক মুহুর্তের জন্য সেগুলি ভুলে যাওয়া। পরিবর্তে, তাদের প্রতিটি যে সফ্টওয়্যার থেকে উদ্ভূত হয়েছিল সে সম্পর্কে চিন্তা করুন। এটি সত্যিই প্রাথমিক ওয়েব এবং ডেস্কটপের মধ্যে পার্থক্যের জন্য উত্সাহিত হয়।
2000-এর দশকের মাঝামাঝি সময়ে যখন তারা জটিলতায় বেড়েছে, এমভিসি সফটওয়্যার ডিজাইনের ধরণ - যা প্রথম 1970 সালে বর্ণিত হয়েছিল - ওয়েব অ্যাপ্লিকেশনগুলিতে প্রয়োগ করা শুরু হয়েছিল। ডাটাবেস, এইচটিএমএল পৃষ্ঠাগুলি এবং কোড অভ্যন্তরীন মনে করুন। এমভিসি পৌঁছানোর জন্য এটি সামান্য একটু পরিমার্জন করা যাক: »ডাটাবেস For এর জন্য, আসুন ডাটাবেস প্লাস ইন্টারফেস কোডটি ধরে নেওয়া যাক। »এইচটিএমএল পৃষ্ঠাগুলি For এর জন্য আসুন এইচটিএমএল টেমপ্লেট প্লাস টেমপ্লেট প্রসেসিং কোড ধরে নেওয়া যাক। »কোড অন্তর্হীন« এর জন্য, কোডগুলি ম্যাপিং ব্যবহারকারীর ক্লিকগুলি ক্রিয়াতে ধরে নেওয়া যাক সম্ভবত ডাটাবেসকে প্রভাবিত করে, অবশ্যই অন্য একটি ভিউ প্রদর্শিত হবে। এটি কমপক্ষে এই তুলনার উদ্দেশ্যে।
আসুন আমরা এই ওয়েব স্টাফটির একটি বৈশিষ্ট্য বজায় রাখি, আজকের মতো নয়, তবে এটি যেমন দশ বছর আগে বিদ্যমান ছিল, যখন জাভাস্ক্রিপ্টটি একটি নিম্নমানের, ঘৃণ্য বিরক্তিজনক ছিল, যা বাস্তব প্রোগ্রামাররা এটিকে পরিষ্কার করে দেওয়া উচিত: এইচটিএমএল পৃষ্ঠাটি মূলত বোবা এবং নিষ্ক্রিয় । ব্রাউজারটি একটি পাতলা ক্লায়েন্ট, বা আপনি যদি করেন তবে একটি দরিদ্র ক্লায়েন্ট। ব্রাউজারে কোনও বুদ্ধি নেই। পূর্ণ পৃষ্ঠা পুনরায় লোড নিয়ম। »দর্শন। প্রতিবার নতুন করে উত্পন্ন হয়।
আসুন মনে রাখবেন যে এই ওয়েব উপায়টি সমস্ত ক্রোধের পরেও ডেস্কটপের তুলনায় মারাত্মকভাবে পিছিয়ে ছিল। ডেস্কটপ অ্যাপ্লিকেশনগুলি হ'ল ফ্যাট ক্লায়েন্ট বা সমৃদ্ধ ক্লায়েন্ট, যদি আপনি চান। (এমনকি মাইক্রোসফ্ট ওয়ার্ডের মতো কোনও প্রোগ্রামকে কোনও ধরণের ক্লায়েন্ট, নথিগুলির জন্য ক্লায়েন্ট হিসাবে বিবেচনা করা যেতে পারে)) তারা বুদ্ধি পূর্ণ, তাদের ডেটা সম্পর্কে জ্ঞানসম্পন্ন ক্লায়েন্ট। তারা রাষ্ট্রীয়। তারা মেমরিতে পরিচালনা করছে এমন ডেটা ক্যাশে করে। পূর্ণ পৃষ্ঠা পুনরায় লোডের মতো কোনও বকাবকি নেই।
এবং এই সমৃদ্ধ ডেস্কটপ উপায়টি সম্ভবত দ্বিতীয় সংক্ষিপ্ত বিবরণ এমভিভিএমের উদ্ভব হয়েছে। চিঠিগুলি দ্বারা বোকা বোকা বানাবেন না, সি এর বাদ দিয়ে এখনও নিয়ন্ত্রণকারীরা রয়েছেন। তাদের হওয়া দরকার। কিছুই সরানো হয় না। আমরা কেবল একটি জিনিস যুক্ত করি: রাষ্ট্রীয়তা, ক্লায়েন্টের উপর ক্যাশে হওয়া ডেটা (এবং এটির সাথে ডেটা পরিচালনা করার জন্য বুদ্ধিও থাকে)। সেই ডেটা, ক্লায়েন্টের মূলত একটি ক্যাশে, এখন »ভিউমোডেল called নামে পরিচিত« এটিই সমৃদ্ধ ইন্টারঅ্যাক্টিভিটির অনুমতি দেয়। এবং এটাই.
আমরা দেখতে পাচ্ছি ফ্ল্যাশ, সিলভারলাইট এবং - সবচেয়ে গুরুত্বপূর্ণ - জাভাস্ক্রিপ্টের সাহায্যে ওয়েব এমভিভিএমকে গ্রহণ করেছে। ব্রাউজারগুলিকে আর বৈধভাবে পাতলা ক্লায়েন্ট বলা যায় না। তাদের প্রোগ্রামযোগ্যতা দেখুন। তাদের স্মৃতি গ্রাহ্য দেখুন। আধুনিক ওয়েব পৃষ্ঠাগুলিতে সমস্ত জাভাস্ক্রিপ্ট ইন্টারেক্টিভিটি দেখুন।
ব্যক্তিগতভাবে, আমি এই তত্ত্ব এবং সংক্ষিপ্তসার ব্যবসায়টি কংক্রিটের বাস্তবতায় কী উল্লেখ করছে তা দেখে বোঝা সহজ find বিমূর্ত ধারণাগুলি কার্যকর, বিশেষত যখন কংক্রিটের বিষয়ে প্রদর্শিত হয়, তাই বোঝাপড়াটি পুরো বৃত্তে আসতে পারে।
এমভিভিএম মডেল-ভিউ ভিউমোডেল এমভিসি, মডেল-ভিউ কন্ট্রোলারের সাথে সমান
কন্ট্রোলারটি ভিউমোডেল দ্বারা প্রতিস্থাপন করা হয় । ভিউমোডেলটি ইউআই স্তরের নীচে বসে আছে। ভিউমোডেল সেই ভিউটির প্রয়োজনীয় ডেটা এবং কমান্ড অবজেক্টগুলি প্রকাশ করে। আপনি এটিকে একটি ধারক বস্তু হিসাবে ভাবতে পারেন যা দেখতে তার ডেটা এবং ক্রিয়া পেতে চলে। ভিউমোডেল মডেলটি থেকে এর ডেটা টানবে।
রাসেল ইস্ট এমভিভিএম কেন এমভিসি থেকে আলাদা সে সম্পর্কে বিস্তারিতভাবে একটি ব্লগ আলোচনা করছে
If you put ten software architects into a room and have them discuss what the Model-View-Controller pattern is, you will end up with twelve different opinions. …
এক কিছুর জন্য, এমভিভিএম হ'ল এমভিসি প্যাটার্নের অগ্রগতি যা প্রদর্শন পরিচালনা করতে এক্সএএমএল ব্যবহার করে। এই নিবন্ধটি দুটির কয়েকটি দিকের রূপরেখা তুলে ধরেছে।
মডেল / ভিউ / ভিউমোডেল আর্কিটেকচারের মূল জোড় মনে হয় যে উপাত্তের উপরে ("মডেল"), অ-ভিজ্যুয়াল উপাদানগুলির একটি আরও স্তর রয়েছে ("ভিউমোডেল") যা তথ্যের ধারণাগুলি আরও নিবিড়ভাবে মানচিত্র করে ডেটা দেখার ধারণার কাছে ("দেখুন") এটি ভিউমোডেল যা দৃশ্যের সাথে আবদ্ধ হয়, সরাসরি মডেলটিকে নয়।
মাইক্রোসফ্ট এখানে উইন্ডোজ পরিবেশে এমভিভিএম প্যাটার্ন একটি ব্যাখ্যা প্রদান ।
এখানে একটি গুরুত্বপূর্ণ বিভাগ:
মডেল-ভিউ-ভিউমোডেল ডিজাইন প্যাটার্নে একটি অ্যাপ তিনটি সাধারণ উপাদান নিয়ে গঠিত।
মডেল : এটি আপনার অ্যাপ্লিকেশনটি গ্রহন করে এমন ডেটা মডেলকে উপস্থাপন করে। উদাহরণস্বরূপ, কোনও ছবি ভাগ করে নেওয়ার অ্যাপ্লিকেশনটিতে, এই স্তরটি কোনও ডিভাইসে উপলব্ধ চিত্রগুলির সেট এবং চিত্র পাঠাগারে পড়তে এবং লিখতে ব্যবহৃত API এর প্রতিনিধিত্ব করতে পারে।
দেখুন : একটি অ্যাপ্লিকেশন সাধারণত UI এর একাধিক পৃষ্ঠাগুলির সমন্বয়ে গঠিত। ব্যবহারকারীর দেখানো প্রতিটি পৃষ্ঠা এমভিভিএম পরিভাষায় একটি দৃশ্য। ব্যবহারকারীটি যা দেখায় তা সংজ্ঞায়িত করতে ও স্টাইল করতে ব্যবহৃত হয় এক্সএএমএল কোড view মডেলটির ডেটা ব্যবহারকারীর কাছে প্রদর্শিত হয় এবং অ্যাপের বর্তমান অবস্থার উপর ভিত্তি করে এই তথ্যটি ইউআইকে খাওয়ানো ভিউমোডেলের কাজ। উদাহরণস্বরূপ, একটি ছবি ভাগ করে নেওয়ার অ্যাপ্লিকেশনটিতে, দর্শনগুলি এমন UI হবে যা ব্যবহারকারীকে ডিভাইসে অ্যালবামের তালিকা, অ্যালবামের ছবিগুলি এবং ব্যবহারকারীকে কোনও নির্দিষ্ট চিত্র দেখায় picture
ভিউমোডেল : ভিউমোডেল অ্যাপ্লিকেশনটির ইউআই, বা ভিউগুলির সাথে ডেটা মডেল বা সহজভাবে মডেলটিকে যুক্ত করে। এতে এমন যুক্তি রয়েছে যা দিয়ে মডেল থেকে ডেটা পরিচালনা করতে হবে এবং এক্সএএমএল ইউআই বা মতামতগুলি আবদ্ধ করতে পারে এমন বৈশিষ্ট্যের সেট হিসাবে ডেটা প্রকাশ করে। উদাহরণস্বরূপ, একটি ছবি ভাগ করে নেওয়ার অ্যাপ্লিকেশনে, ভিউমোডেল অ্যালবামগুলির একটি তালিকা প্রকাশ করবে এবং প্রতিটি অ্যালবামের জন্য ছবির একটি তালিকা প্রকাশ করবে। ছবিগুলি কোথা থেকে এসেছে এবং কীভাবে সেগুলি পুনরুদ্ধার করা হয় সে সম্পর্কে ইউআই অজ্ঞাতবিদ। এটি কেবলমাত্র ভিউমোডেল দ্বারা প্রকাশিত চিত্রগুলির একটি সেট সম্পর্কে জানে এবং তাদের ব্যবহারকারীর কাছে দেখায়।
আমি ভেবেছিলাম মূল পার্থক্যগুলির মধ্যে একটি হ'ল এমভিসিতে আপনার ভি সরাসরি আপনার এম পড়েন, এবং সিটি দিয়ে ডেটা ম্যানিপুলেট করার জন্য যান, অন্যদিকে এমভিভিএম-এ আপনার ভিএম এম প্রক্সির কাজ করে, পাশাপাশি আপনাকে উপলব্ধ কার্যকারিতা সরবরাহ করে ভি
আমি যদি আবর্জনায় পূর্ণ না হয়ে থাকি, আমি অবাক হয়ে যাই যে কেউ হাইব্রিড তৈরি করেনি, যেখানে আপনার ভিএম কেবলমাত্র একটি এম প্রক্সি, এবং সি সমস্ত কার্যকারিতা সরবরাহ করে।
সাধারণ পার্থক্য: (ইয়াকভের কোর্সেরা অ্যাঙ্গুলারজেএস কোর্সে অনুপ্রাণিত)
এমভিসি (মডেল ভিউ কন্ট্রোলার)
MVVM (মডেল ভিউ মডেল)
ViewModel :
এমভিসি একটি নিয়ন্ত্রিত পরিবেশ এবং এমভিভিএম একটি প্রতিক্রিয়াশীল পরিবেশ।
একটি নিয়ন্ত্রিত পরিবেশে আপনার কম কোড এবং যুক্তির একটি সাধারণ উত্স থাকতে হবে; যা সর্বদা নিয়ামকের মধ্যে থাকতে পারে। যাহোক; ওয়েব ওয়ার্ল্ডে এমভিসি সহজেই নির্মাণের যুক্তিগুলিতে বিভক্ত হয়ে যায় এবং গতিশীল যুক্তি দেখায়। ক্রিয়েশন সার্ভারে বেঁচে থাকে এবং ক্লায়েন্টের উপর ডায়নামিক লাইফ থাকে। আপনি এঙ্গুলারজেএস এর সাথে মিলিত এএসপি.নেট এমভিসির সাথে এটি অনেক কিছুই দেখতে পান যেখানে সার্ভারটি একটি মডেলটিতে একটি ভিউ তৈরি করে পাস করে ক্লায়েন্টকে প্রেরণ করবে। ক্লায়েন্ট তারপরে অ্যাংুলারজেএস স্থানীয় কন্ট্রোলার হিসাবে পদক্ষেপ নেওয়ার ক্ষেত্রে ভিউয়ের সাথে যোগাযোগ করবে। একবার মডেলটি জমা দেওয়া বা একটি নতুন মডেল আবার সার্ভার নিয়ামককে পাস করে হ্যান্ডেল করা হয়। (এইভাবে চক্রটি অবিরত থাকে এবং সকেট বা এজাক্স ইত্যাদির সাথে কাজ করার সময় এই হ্যান্ডলিংয়ের আরও অনেক অনুবাদ রয়েছে তবে সমস্ত আর্কিটেকচারের উপরে অভিন্ন is)
এমভিভিএম একটি প্রতিক্রিয়াশীল পরিবেশ যার অর্থ আপনি সাধারণত কোড লেখেন (যেমন ট্রিগার) যা কিছু ইভেন্টের ভিত্তিতে সক্রিয় হবে। এক্সএএমএল-এ, যেখানে এমভিভিএম সমৃদ্ধ হয়, এটি সহজেই অন্তর্নির্মিত ডেটাবাইন্ডিং ফ্রেমওয়ার্কের সাহায্যে সম্পন্ন হয় তবে উল্লিখিত হিসাবে এটি কোনও প্রোগ্রামিং ভাষার সাথে কোনও ভিউতে কোনও সিস্টেমে কাজ করবে। এটি এমএস নির্দিষ্ট নয়। ভিউমোডেল আগুন (সাধারণত কোনও সম্পত্তি পরিবর্তিত ইভেন্ট) হয় এবং আপনি যা কিছু ট্রিগার তৈরি করেন তার ভিত্তিতে ভিউ এতে প্রতিক্রিয়া দেখায়। এটি প্রযুক্তিগত পেতে পারে তবে নীচের অংশটি হল ভিউ স্টেটহীন এবং যুক্তি ছাড়াই। এটি কেবল মানগুলির ভিত্তিতে রাষ্ট্র পরিবর্তন করে। তদ্ব্যতীত, ভিউমোডেলগুলি খুব অল্প যুক্তি দিয়ে রাষ্ট্রহীন এবং মডেলগুলি মূলত জিরো লজিক সহ একটি রাজ্য কারণ তাদের কেবল রাষ্ট্র বজায় রাখা উচিত। আমি এটিকে অ্যাপ্লিকেশন স্টেট (মডেল), রাষ্ট্র অনুবাদক (ভিউমোডেল) এবং তারপরে ভিজ্যুয়াল স্টেট / ইন্টারঅ্যাকশন (দেখুন) হিসাবে বর্ণনা করি।
একটি এমভিসি ডেস্কটপ বা ক্লায়েন্টের পাশের অ্যাপ্লিকেশনটিতে আপনার একটি মডেল থাকা উচিত এবং মডেলটি নিয়ামক দ্বারা ব্যবহার করা উচিত। মডেলটির উপর ভিত্তি করে নিয়ামক দেখুনটি সংশোধন করবে। ভিউগুলি সাধারণত ইন্টারফেসের সাথে নিয়ন্ত্রণকারীদের সাথে আবদ্ধ থাকে যাতে কন্ট্রোলার বিভিন্ন দৃশ্যের সাথে কাজ করতে পারে। এএসপি.এনইটি-তে এমভিসির জন্য যুক্তিটি সার্ভারে কিছুটা পিছনের দিকে থাকে কারণ কন্ট্রোলার মডেলগুলি পরিচালনা করে এবং একটি নির্বাচিত দৃশ্যে মডেলগুলিকে পাস করে। ভিউটি তখন মডেলের উপর ভিত্তি করে ডেটা দিয়ে পূর্ণ হয় এবং এর নিজস্ব যুক্তি রয়েছে (সাধারণত আরও একটি এমভিসি সেট যেমন অ্যাংুলারজেএস দিয়ে করা)। লোকেরা তর্ক করবে এবং এটিকে অ্যাপ্লিকেশন এমভিসির সাথে বিভ্রান্ত করবে এবং প্রকল্পটি রক্ষণাবেক্ষণের পরিণতিতে বিপর্যয়ে পরিণত হবে এমন উভয়ই করার চেষ্টা করবে। এমভিসি ব্যবহার করার সময় সর্বদা যুক্তি ও নিয়ন্ত্রণকে এক জায়গায় রাখুন। কন্ট্রোলার বা মডেল ডেটা সামঞ্জস্য করার জন্য ভিউ (বা ওয়েবের জন্য জেএস এর মাধ্যমে ভিউতে) এর পিছনে কোডটিতে ভিউ লজিকটি লিখবেন না। কন্ট্রোলার দর্শন পরিবর্তন করতে দিন। কেবলমাত্র যুক্তি যা একটি ভিউতে বাস করা উচিত তা হ'ল এটি যে ইন্টারফেসটি ব্যবহার করছে তা তৈরি এবং চালানোর জন্য যা লাগে। এর একটি উদাহরণ একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড জমা দেওয়া। ডেস্কটপ বা ওয়েব পৃষ্ঠা (ক্লায়েন্টে) কন্ট্রোলারের জমা দেওয়ার প্রক্রিয়াটি পরিচালনা করা উচিত যখনই ভিউ জমা দেওয়ার ক্রিয়াকলাপটি প্রকাশ করে। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি সর্বদা আপনার এমভিসি ওয়েব বা স্থানীয় অ্যাপের চারপাশে সহজেই আপনার পথ খুঁজে পেতে পারেন। ডেস্কটপ বা ওয়েব পৃষ্ঠা (ক্লায়েন্টে) কন্ট্রোলারের জমা দেওয়ার প্রক্রিয়াটি পরিচালনা করা উচিত যখনই ভিউ জমা দেওয়ার ক্রিয়াকলাপটি প্রকাশ করে। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি সর্বদা আপনার এমভিসি ওয়েব বা স্থানীয় অ্যাপের চারপাশে সহজেই আপনার পথ খুঁজে পেতে পারেন। ডেস্কটপ বা ওয়েব পৃষ্ঠা (ক্লায়েন্টে) কন্ট্রোলারের জমা দেওয়ার প্রক্রিয়াটি পরিচালনা করা উচিত যখনই ভিউ জমা দেওয়ার ক্রিয়াকলাপটি প্রকাশ করে। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি সর্বদা আপনার এমভিসি ওয়েব বা স্থানীয় অ্যাপের চারপাশে সহজেই আপনার পথ খুঁজে পেতে পারেন।
এটি সম্পূর্ণ প্রতিক্রিয়াশীল বলে এমভিভিএম ব্যক্তিগতভাবে আমার প্রিয়। কোনও মডেল যদি রাষ্ট্র পরিবর্তন করে তবে ভিউমোডেল সেই রাষ্ট্রটি শোন এবং অনুবাদ করে এবং এটিই !!! এরপরে দৃশ্যটি রাষ্ট্রীয় পরিবর্তনের জন্য ভিউমোডেল শুনছে এবং ভিউমোডেল থেকে অনুবাদের ভিত্তিতে এটি আপডেট হয়। কিছু লোক একে খাঁটি এমভিভিএম বলে তবে এটিতে কেবলমাত্র একটিই আছে এবং আপনি কীভাবে যুক্তি দিবেন তা আমি বিবেচনা করি না এবং এটি সর্বদা খাঁটি এমভিভিএম যেখানে ভিউতে একেবারেই যুক্তি থাকে না।
এখানে একটি সামান্য উদাহরণ রয়েছে: আসুন আমরা বলি যে আপনি একটি বোতাম টিপে একটি মেনু স্লাইড পেতে চান। এমভিসিতে আপনার ইন্টারফেসে একটি মেনুপ্রেসড ক্রিয়া থাকবে। আপনি মেনু বোতামটি ক্লিক করেন এবং তারপরে স্লাইডমেনুআইনের মতো অন্য কোনও ইন্টারফেস পদ্ধতির উপর ভিত্তি করে মেনুতে স্লাইড করতে ভিউটি বলবেন যখন নিয়ন্ত্রকটি জানতে পারবে। কোন কারণে একটি রাউন্ড ট্রিপ? কন্ট্রোলার সিদ্ধান্ত নেয় আপনি এর বদলে অন্য কিছু করতে বা করতে চান না। কন্ট্রোলার যদি না বলে থাকে তবে কিছুই করা ছাড়া ভিউয়ের সাথে ভিউয়ের দায়িত্বে থাকা উচিত। যাহোক; এমভিভিএম-এ অ্যানিমেশনের স্লাইড মেনুটি জেনেরিক এবং জেনারিক আকারে তৈরি করা উচিত এবং পরিবর্তে এটি স্লাইড করতে বলা হওয়ার কারণে কিছু মানের ভিত্তিতে এটি করবে। সুতরাং এটি ভিউমোডেল শুনে এবং যখন ভিউমোডেল বলে, ইসমেনুএ্যাকটিভ = সত্য (বা তবে) এর জন্য অ্যানিমেশনটি স্থান নেয়। এখন, এর সাথে আমি বলেছিলাম যে আমি আরেকটি বিষয় সত্যই পরিষ্কার করতে চাই এবং দয়া করে মনোযোগ দিন। ইসমেনুএ্যাকটিভ সম্ভবত বিএড এমভিভিএম বা ভিউমোডেল ডিজাইন। ভিউমোডেল ডিজাইন করার সময় আপনার কখনই ধারণা করা উচিত নয় যে কোনও ভিউয়ের কোনও বৈশিষ্ট্যই থাকবে এবং কেবল অনুবাদিত মডেল রাজ্যটি উত্তীর্ণ হবে। যদি আপনি মেনু অপসারণ করতে এবং নিজের দৃষ্টিভঙ্গি পরিবর্তন করার সিদ্ধান্ত নিয়ে থাকেন এবং কেবল অন্য উপায়ে ডেটা / বিকল্পগুলি দেখান, তবে ভিউমোডেল কিছুতেই পাত্তা দেয় না। সুতরাং আপনি মেনু পরিচালনা করবেন কিভাবে? যখন ডেটা বোঝা যায় যে কিভাবে। সুতরাং, এটি করার একটি উপায় হ'ল মেনুটিকে বিকল্পগুলির একটি তালিকা দেওয়া (সম্ভবত অভ্যন্তরীণ ভিউমোডেলগুলির একটি অ্যারে)। যদি সেই তালিকায় ডেটা থাকে তবে মেনুটি তখন ট্রিগারটির মাধ্যমে খুলতে জানে, যদি না হয় তবে এটি ট্রিগারটির মাধ্যমে লুকিয়ে রাখতে জানে। আপনার কাছে কেবল ভিউমোডেলে মেনুটির জন্য ডেটা রয়েছে বা না। ভিউমোডেলে সেই ডেটাটি দেখানোর / আড়াল করার সিদ্ধান্ত নেবেন না .. কেবলমাত্র মডেলের রাজ্যটি অনুবাদ করুন। এই উপায়টি সম্পূর্ণ প্রতিক্রিয়াশীল এবং জেনেরিক এবং বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে।
যদি আপনি ইতিমধ্যে প্রতিটিটির স্থাপত্যের সাথে কমপক্ষে কিছুটা পরিচিত না হয়ে থাকেন এবং এটি খুব বিভ্রান্তিকর হতে পারে তবে নেটে আপনার প্রচুর খারাপ তথ্য পাবেন বলে এই সমস্ত কিছু সম্ভবত একেবারেই অর্থবহ নয়।
সুতরাং ... এই অধিকার পেতে জিনিসগুলি মনে রাখা উচিত। কীভাবে আপনার অ্যাপ্লিকেশনটি ডিজাইন করবেন এবং এটিতে স্টিক করুন front
আপনি যদি এমভিসি করেন, যা দুর্দান্ত then তবে নিশ্চিত হয়ে নিন যে আপনি কন্ট্রোলার পরিচালনাযোগ্য এবং আপনার দর্শনের সম্পূর্ণ নিয়ন্ত্রণে রয়েছেন। আপনার যদি একটি বড় ভিউ থাকে তবে বিভিন্ন কন্ট্রোলার রয়েছে এমন ভিউতে নিয়ন্ত্রণ যুক্ত করার বিষয়টি বিবেচনা করুন। কেবলমাত্র এই নিয়ন্ত্রকদের বিভিন্ন নিয়ামককে ক্যাসকেড করতে হবে না। বজায় রাখতে খুব হতাশাব্যঞ্জক। কিছুক্ষণ সময় নিন এবং জিনিসগুলি পৃথকভাবে এমনভাবে ডিজাইন করুন যা পৃথক উপাদান হিসাবে কাজ করবে ... এবং সর্বদা কন্ট্রোলার মডেলকে স্টোরেজ প্রতিশ্রুতিবদ্ধ বা চালিয়ে যেতে বলুন। এমভিসি-র জন্য আদর্শ নির্ভরতা সেটআপ হ'ল ভিউ-কন্ট্রোলার → মডেল বা এএসপি.নেট (আমাকে আরম্ভ করবেন না) মডেল ← ভিউ ↔ কন্ট্রোলার → মডেল (যেখানে মডেল একই বা সম্পূর্ণ ভিন্ন মডেল হতে পারে নিয়ন্ত্রণকারীর থেকে দেখতে)... অবশ্যই এই সময়ে ভিউতে নিয়ন্ত্রকের সম্পর্কে জানা দরকার কেবলমাত্র কোনও মডেল পাস করতে হবে তা জানার জন্য শেষ পয়েন্টের রেফারেন্সের জন্য।
আপনি যদি এমভিভিএম করেন, আমি আপনার সদয় আত্মাকে আশীর্বাদ করব, তবে এটি সঠিকভাবে করার জন্য সময় নিই! এক জন্য ইন্টারফেস ব্যবহার করবেন না। আপনার ভিউটিকে কীভাবে মানগুলির উপর ভিত্তি করে দেখা যাচ্ছে তা সিদ্ধান্ত নিতে দিন। মক ডেটা দিয়ে ভিউ দিয়ে খেলুন। আপনি যদি এমন কোনও ভিউ শেষ করেন যা আপনাকে মেনু দেখাচ্ছে (উদাহরণ হিসাবে) যদিও আপনি সেই সময়ে এটি না চান তবে ভাল। আপনার দৃষ্টিভঙ্গি যেমনটি করা উচিত কাজ করছে এবং এটির মানগুলির উপর নির্ভর করে প্রতিক্রিয়া করছে। যখন ভিউমোডেল কোনও নির্দিষ্ট অনুবাদকৃত অবস্থায় থাকে বা ভিউমোডেলকে এই অবস্থাটি খালি করার নির্দেশ দেয় তখন এটি না ঘটে তা নিশ্চিত করতে আপনার ট্রিগারটিতে আরও কয়েকটি প্রয়োজনীয়তা যুক্ত করুন। আপনার ভিউমোডলে এটিকে অভ্যন্তরীণ যুক্তি দিয়ে মুছে ফেলবেন না যেন আপনি সেখান থেকে স্থির করছেন যে ভিউটি দেখতে হবে কিনা। মনে রাখবেন আপনি ভিউমোডেলে মেনু আছে বা নেই তা ধরে নিতে পারবেন না। এবং পরিশেষে, মডেলটি কেবল আপনাকে পরিবর্তনের অনুমতি দেয় এবং সম্ভবত স্টোরের স্টেট। এখানেই বৈধতা এবং সমস্ত ঘটবে; উদাহরণস্বরূপ, যদি মডেল রাষ্ট্রটি পরিবর্তন করতে না পারে তবে তা কেবল নিজেকে নোংরা বা কিছু হিসাবে চিহ্নিত করবে। যখন ভিউমোডেল এটি বুঝতে পারে তখন এটি কী নোংরা তা অনুবাদ করবে এবং ভিউটি তখন এটি উপলব্ধি করবে এবং অন্য ট্রিগারটির মাধ্যমে কিছু তথ্য প্রদর্শন করবে। ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত রাজ্যটিকে পরিবর্তন করুন তবে এটি কেবল নিজেকে নোংরা বা কিছু হিসাবে পতাকাঙ্কিত করবে। যখন ভিউমোডেল এটি বুঝতে পারে তখন এটি কী নোংরা তা অনুবাদ করবে এবং ভিউটি তখন এটি উপলব্ধি করবে এবং অন্য ট্রিগারটির মাধ্যমে কিছু তথ্য প্রদর্শন করবে। ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত রাজ্যটিকে পরিবর্তন করুন তবে এটি কেবল নিজেকে নোংরা বা কিছু হিসাবে পতাকাঙ্কিত করবে। যখন ভিউমোডেল এটি বুঝতে পারে তখন এটি কী নোংরা তা অনুবাদ করবে এবং ভিউটি তখন এটি উপলব্ধি করবে এবং অন্য ট্রিগারটির মাধ্যমে কিছু তথ্য প্রদর্শন করবে। ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিতদেখুন M ভিউমোডেল → মডেল (এবং এখানে একটি পার্শ্ব নোট ... এবং এটি সম্ভবত তর্ক করা হবে তবে আমি পাত্তা দিচ্ছি না ... মোডেলটি অপরিবর্তনীয় না হলে মডেলটি পাস করবেন না; অন্যথায় এটি দিয়ে মুড়ে রাখুন যথাযথ ভিউমোডেল The ভিউটি কোনও মডেল পিরিয়ড দেখতে পাবে না I
এখানে আমার চূড়ান্ত টিপ ... একটি ভাল নকশাযুক্ত, তবুও খুব সাধারণ, এমভিসি অ্যাপ্লিকেশনটি দেখুন এবং এমভিভিএম অ্যাপ্লিকেশনটির জন্য এটি করুন। একের সীমাবদ্ধ শূন্য নমনীয়তা সহ আরও নিয়ন্ত্রণ থাকবে এবং অন্যটির নিয়ন্ত্রণ এবং সীমাহীন নমনীয়তা থাকবে না।
নিয়ন্ত্রক গোষ্ঠী বা (একটি একক উত্স) থেকে পুরো অ্যাপ্লিকেশনটি পরিচালনা করার জন্য একটি নিয়ন্ত্রিত পরিবেশ ভাল হয় যখন বাকী অ্যাপ্লিকেশনটি কী করছে তা সম্পর্কে কোনও ধারণা ছাড়াই একটি প্রতিক্রিয়াশীল পরিবেশ পৃথক সংগ্রহস্থলে বিভক্ত হতে পারে। মাইক্রো পরিচালনা বনাম ফ্রি ম্যানেজমেন্ট।
আমি যদি আপনাকে বিভ্রান্ত না করি তবে আমার সাথে যোগাযোগ করার চেষ্টা করুন ... চিত্রণ এবং উদাহরণ সহ পুরো বিশদভাবে এটি নিয়ে যেতে আমার আপত্তি নেই।
দিনের শেষে আমরা সমস্ত প্রোগ্রামার এবং কোডিং করার সময় সেই অরাজকতার সাথে আমাদের মধ্যে বাঁচে ... সুতরাং নিয়মগুলি ভেঙে দেওয়া হবে, তত্ত্বগুলি পরিবর্তিত হবে এবং এর সবগুলিই হোগ ওয়াশ হয়ে যাবে ... তবে বড় কাজ করার সময় প্রকল্প এবং বড় দলগুলিতে, এটি সত্যই একটি নকশার প্যাটার্নে একমত হতে এবং এটি প্রয়োগ করতে সহায়তা করে। একদিন এটি শুরুতে নেওয়া ছোট ছোট অতিরিক্ত পদক্ষেপগুলি পরে সাশ্রয়ের সীমাবদ্ধ হয়ে উঠবে।
এমভিভিএম হ'ল উপস্থাপনা মডেল প্যাটার্নের একটি সংশোধন (বিতর্কযোগ্য) । আমি বিতর্কযোগ্য বলি, কারণ ডাব্লুপিএফ কীভাবে ডেটা বাইন্ডিং এবং কমান্ড হ্যান্ডলিংয়ের ক্ষমতা সরবরাহ করে তার মধ্যে পার্থক্য।
ভিউ মডেলটি আপনার ব্যবহারকারী ইন্টারফেসের উপাদানগুলির জন্য একটি "বিমূর্ত" মডেল। এটি আপনাকে অবশ্যই অ-ভিজ্যুয়াল উপায়ে কমান্ডগুলি এবং আপনার দৃষ্টিতে ক্রিয়াগুলি কার্যকর করতে দেয় (উদাহরণস্বরূপ এটি পরীক্ষা করার জন্য)।
আপনি যদি এমভিসির সাথে কাজ করেছেন, আপনি সম্ভবত কখনও কখনও আপনার দৃষ্টিভঙ্গির অবস্থা প্রতিবিম্বিত করতে মডেল অবজেক্ট তৈরি করতে দরকারী হিসাবে ব্যবহার করেছেন, উদাহরণস্বরূপ, কিছু সম্পাদনা ডায়ালগ প্রদর্শন করা এবং আড়াল করা ইত্যাদি। সেক্ষেত্রে আপনি একটি ভিউমোডেল ব্যবহার করছেন।
এমভিভিএম প্যাটার্নটি হ'ল সমস্ত অনুশীলনের উপাদানগুলির কাছে সেই অনুশীলনের সাধারণকরণ।
এবং এটি কোনও মাইক্রোসফ্ট প্যাটার্ন নয়, সংযুক্তিগুলি হ'ল এই প্যাটার্নটির সাথে কাজ করার জন্য ডাব্লুপিএফ / সিলভারলাইট ডেটা-বাইন্ডিংগুলি বিশেষভাবে উপযুক্ত। উদাহরণস্বরূপ, জাভা সার্ভারের মুখগুলি ব্যবহার করে আপনাকে কোনও কিছুই থামায় না।
অন্যান্য উত্তরগুলি কারও পক্ষে বোঝা সহজ নয় যিনি স্থাপত্য নিদর্শনগুলির বিষয়গুলির সাথে খুব বেশি পরিচিত নন। অ্যাপ আর্কিটেকচারে নতুন এমন কেউ হয়ত জানতে চান তার পছন্দটি কীভাবে অনুশীলন করে তার অ্যাপ্লিকেশনটিকে প্রভাবিত করতে পারে এবং সম্প্রদায়ের মধ্যে কী কী হট্টগোল রয়েছে।
উপরের দিকে কিছুটা আলোকপাত করার চেষ্টা করে আমি এমভিভিএম, এমভিপি এবং এমভিসি জড়িত এই চিত্রনাট্যটি তৈরি করেছি। গল্পটি শুরু হয় একজন সিনেমার অনুসন্ধান অ্যাপ্লিকেশনটির 'FIND' বোতামে ক্লিক করে একজন ব্যবহারকারী ...
ব্যবহারকারী: ক্লিক করুন ...
দেখুন : কে সে? [ এমভিভিএম | এমভিপি | এমভিসি ]
ব্যবহারকারী: আমি সন্ধানের বোতামটিতে ক্লিক করেছি ...
দেখুন : ঠিক আছে, একটি সেকেন্ড ধরে রাখুন…। [ এমভিভিএম | এমভিপি | এমভিসি ]
( ভিউমোডেলকে কল করা দেখুন | উপস্থাপক | নিয়ন্ত্রক …) [ এমভিভিএম | এমভিপি | এমভিসি ]
দেখুন : আরে ভিউমোডেল | উপস্থাপক | কন্ট্রোলার , একজন ব্যবহারকারী সবেমাত্র অনুসন্ধান বোতামে ক্লিক করেছেন, আমি কী করব? [ এমভিভিএম | এমভিপি | এমভিসি ]
ভিউমোডেল | উপস্থাপক | কন্ট্রোলার : আরে ভিউ , সেই পৃষ্ঠাতে কোনও অনুসন্ধান শব্দ রয়েছে? [ এমভিভিএম | এমভিপি | এমভিসি ]
দেখুন : হ্যাঁ,… এটি এখানে… "পিয়ানো" [ এমভিভিএম | এমভিপি | এমভিসি ]
M এটি এমভিভিএম এবং এমভিপি | এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ পার্থক্য এমভিসি ———
উপস্থাপকের : ধন্যবাদ দেখুন ... এদিকে আমি অনুসন্ধান শব্দ আপ দেখছি মডেল , দয়া করে তাকে / তার একটি অগ্রগতি বার প্রদর্শন [ সবচেয়ে মূল্যবান খেলোয়াড় | এমভিসি ]
( উপস্থাপক | নিয়ন্ত্রণকারী মডেলকে কল করছে …) [ এমভিপি | এমভিসি ]
ViewController : ধন্যবাদ, আমি অনুসন্ধান শব্দ আপ খুঁজছেন করা হবে মডেল কিন্তু আপনি সরাসরি আপডেট করবে না। পরিবর্তে, যদি কোনও ফলাফল থাকে তবে আমি অনুসন্ধানের ফলাফলগুলিতে তালিকাভোজযোগ্য ইভেন্টগুলিতে ট্রিগার করব। সুতরাং আপনি যে ভাল পর্যবেক্ষণ ছিল। [ এমভিভিএম ]
(অনুসন্ধানের ফলাফলসমূহের তালিকাগুলি পর্যবেক্ষণযোগ্য যে কোনও ট্রিগার পর্যবেক্ষণ করার সময়, ভিউ মনে করে যে এটি ব্যবহারকারীর কাছে কিছু অগ্রগতি বার প্রদর্শন করা উচিত, যেহেতু ভিউমোডেল এ বিষয়ে তার সাথে কথা বলবে না)
------------------------------
ভিউমোডেল | উপস্থাপক | নিয়ামক : আরে মডেল , এই অনুসন্ধান শব্দটির সাথে আপনার কোনও মিল আছে ?: "পিয়ানো" [ এমভিভিএম | এমভিপি | এমভিসি ]
মডেল : আরে ভিউমোডেল | উপস্থাপক | কন্ট্রোলার , আমাকে পরীক্ষা করতে দিন… [ এমভিভিএম | এমভিপি | এমভিসি ]
( মডেল মুভি ডেটাবেজে একটি জিজ্ঞাসা করছে…) [ এমভিভিএম | এমভিপি | এমভিসি ]
( কিছুক্ষণ পর … )
---- এই মধ্যে উত্পথ বিন্দু MVVM , সবচেয়ে মূল্যবান খেলোয়াড় এবং MVC -----
মডেল : আমি আপনার জন্য একটি তালিকা পেয়েছি, ভিউমোডেল | উপস্থাপক , এখানে এটি জেএসওনে রয়েছে [[name "নাম": "পিয়ানো শিক্ষক", "বছর": 2001}, {"নাম": "পিয়ানো", "বছর": 1993}] "[ এমভিভিএম | এমভিপি ]
মডেল : কিছু ফলাফল উপলব্ধ, কন্ট্রোলার। আমি আমার উদাহরণে একটি ফিল্ড ভেরিয়েবল তৈরি করেছি এবং ফলাফল দিয়ে এটি পূরণ করেছি। এটির নাম "অনুসন্ধানের ফলাফলগুলি তালিকা" [ এমভিসি ]
( উপস্থাপক | নিয়ন্ত্রণকারী মডেলকে ধন্যবাদ জানায় এবং ভিউতে ফিরে আসে ) [ এমভিপি | এমভিসি ]
উপস্থাপক : অপেক্ষার দৃশ্যের জন্য ধন্যবাদ , আমি আপনার জন্য মিলে যাওয়া ফলাফলের একটি তালিকা পেয়েছি এবং সেগুলি উপস্থাপনযোগ্য বিন্যাসে সাজিয়েছি: [“পিয়ানো শিক্ষক 2001 ″,” পিয়ানো 1993]]। এছাড়াও দয়া করে এখন অগ্রগতি বারটি লুকান [ এমভিপি ]
কন্ট্রোলার : অপেক্ষার ভিউয়ের জন্য ধন্যবাদ , আমি আপনার অনুসন্ধানের অনুসন্ধানের বিষয়ে মডেলকে জিজ্ঞাসা করেছি। এটি বলেছে যে এটি মিলে যাওয়া ফলাফলের একটি তালিকা পেয়েছে এবং সেগুলিকে এর উদাহরণের মধ্যে "অনুসন্ধানের ফলাফলগুলি তালিকাভুক্ত" নামক একটি ভেরিয়েবলে সংরক্ষণ করেছে। আপনি সেখান থেকে এটি পেতে পারেন। এছাড়াও দয়া করে এখন অগ্রগতি বারটি লুকান [ এমভিসি ]
ভিউমোডেল : অনুসন্ধানের ফলাফলসমূহের তালিকা পর্যবেক্ষণযোগ্য যে কোনও পর্যবেক্ষককে অবহিত করা যেতে পারে যে উপস্থাপনযোগ্য ফর্ম্যাটে এই নতুন তালিকা রয়েছে: ["পিয়ানো শিক্ষক 2001 ″," পিয়ানো 1993 "]। [ এমভিভিএম ]
দেখুন : আপনাকে অনেক উপস্থাপক [ এমভিপি ] ধন্যবাদ
দেখুন : আপনাকে ধন্যবাদ " নিয়ন্ত্রণকারী " [ এমভিসি ] (এখন দেখুন নিজেই প্রশ্ন তুলছে: মডেল থেকে প্রাপ্ত ফলাফলগুলি আমি ব্যবহারকারীর সামনে কীভাবে উপস্থাপন করব ? সিনেমার প্রযোজনার বছরটি প্রথম বা শেষ হওয়া উচিত ...?)
দেখুন : ওহ, অনুসন্ধানের নতুন ট্রিগার রয়েছে ফলাফলগুলি তালিকাভুক্তযোগ্য ..., ভাল, একটি উপস্থাপনযোগ্য তালিকা আছে, এখন আমাকে কেবল একটি তালিকায় এটি প্রদর্শন করতে হবে। আমারও এখন ফলস্বরূপ অগ্রগতি বারটি আড়াল করা উচিত। [ এমভিভিএম ]
আপনার আগ্রহের ক্ষেত্রে, আমি এখানে মুভি অনুসন্ধান অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রয়োগ করে এমভিভিএম, এমভিপি এবং এমভিসির তুলনা করে এখানে নিবন্ধগুলির একটি সিরিজ লিখেছি ।
এমএসএফটি-র এমভিসি মেশিনটি আমাদের থেকে এটি লুকিয়ে রাখায় এই মডেলটিতে অনুরোধ বা প্রতিক্রিয়াযুক্ত সামগ্রীর সাথে এইচটিটিপি স্তরের কোনও যোগাযোগ নেই ।
উপরের আইটেমের স্পষ্টকরণে (অনুরোধ করে) ...
এটির মতো একটি ভিউমোডেল ধরে নিন:
public class myViewModel{
public string SelectedValue {get;set;}
public void Post(){
//due to MVC model binding the SelectedValue string above will be set by MVC model binding on post back.
//this allows you to do something with it.
DoSomeThingWith(SelectedValue);
SelectedValue = "Thanks for update!";
}
}
পোস্টটির নিয়ন্ত্রক পদ্ধতিটি দেখতে (নীচে দেখুন) দেখতে পাবেন, নোট করুন যে এমভিএমের উদাহরণটি এমভিসি বাইন্ডিং মেকানিজম দ্বারা স্বয়ংক্রিয়ভাবে ইনস্ট্যান্ট হয়। ফলস্বরূপ আপনাকে কখনই ক্যোরি স্ট্রিং স্তরটিতে নেমে যেতে হবে না! এটি এমভিসি হ'ল ক্যোরিয় স্ট্রিংয়ের উপর ভিত্তি করে আপনার জন্য ভিউমোডেল ইনস্ট্যান্ট করছে!
[HTTPPOST]
public ActionResult MyPostBackMethod (myViewModel mvm){
if (ModelState.IsValid)
{
// Immediately call the only method needed in VM...
mvm.Post()
}
return View(mvm);
}
নোট করুন যে উপরের এই ক্রিয়াকলাপটি আপনার উদ্দেশ্য হিসাবে কাজ করার জন্য, আপনার অবশ্যই একটি নাল সিটিওআর সংজ্ঞায়িত করতে হবে যা পোস্টে ফিরে আসে না এমন জিনিসগুলিকে অন্তর্নিহিত করে। সেই পোস্টের পিছনে অবশ্যই সেই জিনিসগুলির জন্য পিছনে নাম / মান জোড়া পোস্ট করতে হবে। যদি হারিয়ে যাওয়া নাম / মান জোড়া থাকে তবে এমভিসি বাইন্ডিং ইঞ্জিন যথাযথ কাজ করে যা কেবল কিছুই নয়! যদি এটি হয় তবে আপনি নিজেকে "পোস্ট ব্যাকগুলিতে ডেটা হারাচ্ছি" বলে মনে করতে পারেন ...
এই প্যাটার্নটির সুবিধা হ'ল ভিউমোডেল সমস্ত "গোলমাল" কাজটি মডেল / বুইজেনিক যুক্তির সাথে ইন্টারফেস করে, নিয়ামকটি কেবলমাত্র এক ধরণের রাউটার। এটি কার্যত এসওসি।
এমভিভিএম মিশ্রণে ভিউ মডেল যুক্ত করে। এটি গুরুত্বপূর্ণ, কারণ এটি আপনাকে আপনার নিয়মিত মডেলের সমস্ত নির্দিষ্ট ইউআই নির্দিষ্ট টুকরো না রেখে ডাব্লুপিএফ-র অনেকগুলি বাধ্যবাধকতা ব্যবহার করতে দেয়।
আমি ভুল হতে পারি, তবে আমি নিশ্চিত নই যে এমভিভিএম সত্যিই নিয়ন্ত্রণকারীকে মিশ্রণে চাপিয়ে দেয়। আমি ধারণাটি এর সাথে আরও সামঞ্জস্যপূর্ণ বলে মনে করি : http://martinfowler.com/eaaDev/PenterationModel.html । আমি মনে করি যে লোকেরা এটি এমভিসির সাথে একত্রিত করতে বেছে নেয়, এটি নয় যে এটি নকশায় তৈরি করা হয়েছে।
আমি যা বলতে পারি, তার থেকে এমভিভিএম এমভিসির এমভি-তে মানচিত্র দেয় - এর অর্থ যে একটি traditionalতিহ্যবাহী এমভিসি প্যাটার্নে ভি সরাসরি এম এর সাথে যোগাযোগ করে না এমভিসির দ্বিতীয় সংস্করণে, এম এবং ভি এমভিভিএমের মধ্যে একটি সরাসরি লিঙ্ক রয়েছে that এম এবং ভি যোগাযোগের সাথে সম্পর্কিত সমস্ত কাজ গ্রহণ করে এবং সি থেকে এটি দ্বিগুণ করার জন্য এটি যুগল হিসাবে দেখা যায়, ফলস্বরূপ, এখনও আরও বড় স্কোপ অ্যাপ্লিকেশন কর্মপ্রবাহ (বা ব্যবহারের দৃশ্যের প্রয়োগ) এমভিভিএম-তে সম্পূর্ণরূপে গণনা করা হয় না। এটি নিয়ামকের ভূমিকা। কন্ট্রোলারগুলি থেকে এই নিম্ন স্তরের দিকগুলি সরিয়ে, তারা পরিষ্কার হয় এবং অ্যাপ্লিকেশনটির ব্যবহারের পরিস্থিতি এবং ব্যবসায়িক যুক্তি সংশোধন করা আরও সহজ করে তোলে এবং নিয়ামকদের আরও পুনরায় ব্যবহারযোগ্য করে তোলে।
এটি আমাকে অবাক করে দেয় যে এটি এমভিভিএমের উত্সের উল্লেখ না করেই একটি উচ্চ ভোটযুক্ত উত্তর । এমভিভিএম হ'ল মাইক্রোসফ্ট সম্প্রদায়ে ব্যবহৃত একটি জনপ্রিয় শব্দ এবং এটি মার্টিন ফওলারের উপস্থাপনা মডেল থেকে উদ্ভূত । সুতরাং প্যাটার্নের উদ্দেশ্য এবং অন্যদের সাথে পার্থক্য বুঝতে, প্যাটার্নটি সম্পর্কে মূল নিবন্ধটি পড়ার প্রথম জিনিস।
ওয়েল, সাধারণত এমভিসি ওয়েব ডেভলপমেন্টে ব্যবহৃত হয় এবং ডাব্লুপিএফ / সিলভারলাইট বিকাশে এমভিভিএম সর্বাধিক জনপ্রিয়। তবে, কখনও কখনও ওয়েব আর্কিটেকুটে এমভিসি এবং এমভিভিএমের মিশ্রণ থাকতে পারে।
উদাহরণস্বরূপ: যদি আপনি ব্যবহার করতে পারেন knockout.js এবং এই ক্ষেত্রে আপনি আপনার ক্লায়েন্ট পাশ MVVM থাকবে। এবং আপনার এমভিসির সার্ভারের দিকটিও পরিবর্তন করতে পারে। জটিল অ্যাপ্লিকেশনগুলিতে, কেউ খাঁটি মডেল ব্যবহার করে না। এমভিসির একটি "মডেল" হিসাবে ভিউমোডেলটি ব্যবহার করার অনুভূতি থাকতে পারে এবং আপনার আসল মডেলটি মূলত এই ভিএম এর একটি অংশ হবে। এটি আপনাকে একটি অতিরিক্ত বিমূর্ত স্তর দেয়।
এমভিভিএমসি, বা সম্ভবত এমভিসি +, এন্টারপ্রাইজগুলির পাশাপাশি দ্রুত প্রয়োগের বিকাশের একটি কার্যকর উপায় বলে মনে হচ্ছে। যদিও ইউআইটিকে ব্যবসা এবং মিথস্ক্রিয়া যুক্তি থেকে পৃথক করা ভাল, তবে 'খাঁটি' এমভিভিএম প্যাটার্ন এবং সর্বাধিক উপলভ্য উদাহরণগুলি একক দৃষ্টিতে সর্বোত্তমভাবে কাজ করে।
আপনার নকশাগুলি সম্পর্কে নিশ্চিত নন, তবে আমার বেশিরভাগ অ্যাপ্লিকেশনগুলিতে পৃষ্ঠা এবং বেশ কয়েকটি (পুনরায় ব্যবহারযোগ্য) ভিউ রয়েছে এবং এইভাবে ভিউমোডেলগুলি কিছুটা ডিগ্রির সাথে ইন্টারেক্ট করার দরকার পড়ে। পৃষ্ঠাটিকে নিয়ামক হিসাবে ব্যবহার করা পুরোপুরি এমভিভিএমের উদ্দেশ্যকে পরাভূত করতে পারে, সুতরাং অন্তর্নিহিত যুক্তির জন্য "ভিএম-সি" পদ্ধতির ব্যবহার না করার ফলে অ্যাপ্লিকেশন পরিপক্ক হওয়ার সাথে সাথেই ভাল হতে পারে ... চ্যালেঞ্জিং কনস্ট্রাক্টগুলি। এমনকি ভিবি-6 এ আমাদের বেশিরভাগই সম্ভবত ব্যবসায়িক যুক্তি কোডিং বোতাম ইভেন্টে বন্ধ করে দিয়েছিলেন এবং একটি নিয়ামকের কাছে 'রিলে' আদেশগুলি শুরু করেছিলেন, তাই না? আমি সম্প্রতি সেই বিষয়টিতে অনেক উদীয়মান ফ্রেমওয়ার্কের দিকে নজর দিয়েছি; আমার প্রিয় স্পষ্টভাবে ম্যাগেলান (কোডেপ্লেক্সে) পদ্ধতির। শুভ কোডিং!
http://en.wikipedia.org/wiki/Model_View_ViewModel#References
নিয়ন্ত্রণকারীকে এমভিভিএম-এ ভিউমোডেল দ্বারা প্রতিস্থাপন করা হয় না, কারণ ভিউমোডেলের একটি সম্পূর্ণ আলাদা কার্যকারিতা থাকে তারপরে একটি নিয়ামক। আপনার এখনও একটি নিয়ামক প্রয়োজন, কারণ একটি নিয়ামক ছাড়া আপনার মডেল, ভিউমোডেল এবং ভিউ খুব বেশি কিছু করবে না ... এমভিভিএম-এ আপনার একটি কন্ট্রোলারও রয়েছে, এমভিভিএম নামটি কেবল মিসেলিডিং।
আমার বিনীত মতে এমভিভিএমসি সঠিক নাম।
আপনি দেখতে পাচ্ছেন ভিউমোডেল এমভিসি প্যাটার্নের কেবল একটি সংযোজন। এটি রূপান্তর-যুক্তিকে (উদাহরণস্বরূপ বস্তুকে একটি স্ট্রিংয়ে রূপান্তর করে) কন্ট্রোলার থেকে ভিউমোডেলে স্থানান্তরিত করে।
আমি এটির জন্য একটি মিডিয়াম নিবন্ধ তৈরি করেছি।
MVVM
দেখুন ➡ ভিউমোডেল ➡ মডেল
আপনি যদি কোনও নিয়ামক ব্যবহার করে থাকেন তবে এতে ভিউ এবং ভিউমোডেলগুলির একটি উল্লেখ থাকতে পারে , যদিও কোনও সুইচইউআইআই-তে প্রদর্শিত হিসাবে কোনও নিয়ামক সর্বদা প্রয়োজন হয় না ।
class CustomView: UIView {
var viewModel = MyViewModel {
didSet {
self.color = viewModel.color
}
}
convenience init(viewModel: MyViewModel) {
self.viewModel = viewModel
}
}
struct MyViewModel {
var viewColor: UIColor {
didSet {
colorChanged?() // This is where the binding magic happens.
}
}
var colorChanged: ((UIColor) -> Void)?
}
class MyViewController: UIViewController {
let myViewModel = MyViewModel(viewColor: .green)
let customView: CustomView!
override func viewDidLoad() {
super.viewDidLoad()
// This is where the binder is assigned.
myViewModel.colorChanged = { [weak self] color in
print("wow the color changed")
}
customView = CustomView(viewModel: myViewModel)
self.view = customView
}
}
সেটআপে পার্থক্য
সাধারণ বৈশিষ্ট্য
এমভিভিএমের সুবিধা
এমভিসির সুবিধা
ব্যবহারিক দৃষ্টিকোণ থেকে, এমভিসি (মডেল-ভিউ-কন্ট্রোলার) একটি নিদর্শন। তবে এমভিসি যখন এএসপিএনটি এমভিসি হিসাবে ব্যবহৃত হয়, যখন সত্তা ফ্রেমওয়ার্ক (ইএফ) এর সাথে মিলিত হয় এবং "পাওয়ার সরঞ্জামগুলি" একটি ওয়েব-পৃষ্ঠায় ডাটাবেস, টেবিল এবং কলামগুলি আনার জন্য একটি খুব শক্তিশালী, আংশিকভাবে স্বয়ংক্রিয় পদ্ধতি যা কোনও সম্পূর্ণর জন্য CRUD অপারেশন বা আর (পুনরুদ্ধার করুন বা পড়ুন) কেবলমাত্র ক্রিয়াকলাপ। কমপক্ষে আমি এমভিভিএম ব্যবহার করার সাথে সাথে ভিউ মডেলগুলি এমন মডেলগুলির সাথে আলাপচারিত হয়েছিলেন যা ব্যবসায়ের বিষয়গুলির উপর নির্ভর করে, যা "হাতে তৈরি" হয়ে যায় এবং প্রচুর প্রচেষ্টার পরেও, একজন ভাগ্যবান যে মডেলগুলি ইএফ একটি দেয় "হিসাবে ভাল হিসাবে দেয়" -of-the-box "। ব্যবহারিক প্রোগ্রামিং দৃষ্টিকোণ থেকে, এমভিসি একটি ভাল পছন্দ বলে মনে হচ্ছে কারণ এটি বাইরের বাইরে প্রচুর ইউটিলিটি দেয়, তবে এখনও বেলস এবং হুইসেল যুক্ত হওয়ার সম্ভাবনা রয়েছে।
দেওয়া অনেক প্রতিক্রিয়ার পরিপূরক, আমি আধুনিক ক্লায়েন্ট-সাইড ওয়েব - বা রিচ ওয়েব অ্যাপ্লিকেশন থেকে কিছু অতিরিক্ত দৃষ্টিভঙ্গি যুক্ত করতে চেয়েছিলাম ।
প্রকৃতপক্ষে আজকাল সহজ ওয়েব সাইট এবং বৃহত্তর ওয়েব অ্যাপ্লিকেশনগুলি সাধারণত বুটস্ট্র্যাপের মতো অনেক জনপ্রিয় লাইব্রেরি দিয়ে তৈরি করা হয়। স্টিভ স্যান্ডারসন দ্বারা নির্মিত, নকআউট এমভিভিএম প্যাটার্নের জন্য সমর্থন সরবরাহ করে যা প্যাটার্নের অন্যতম গুরুত্বপূর্ণ আচরণের নকল করে: ভিউ মডেলের মাধ্যমে ডেটা-বাইন্ডিং। সামান্য জাভাস্ক্রিপ্টের সাহায্যে ডেটা এবং যুক্তি প্রয়োগ করা যেতে পারে যা বুটস্ট্র্যাপেরdata-bind
অনেকগুলি বৈশিষ্ট্য ব্যবহারের অনুরূপ সাধারণ HTML বৈশিষ্ট্যযুক্ত পৃষ্ঠা উপাদানগুলিতে যুক্ত করা যেতে পারে । একসাথে এই দুটি গ্রন্থাগার একাই ইন্টারেক্টিভ সামগ্রী সরবরাহ করে; এবং যখন রাউটিংয়ের সাথে একত্রিত হয়ে এই পদ্ধতির ফলস্বরূপ একক পৃষ্ঠা অ্যাপ্লিকেশন তৈরির জন্য একটি সহজ-তবে-শক্তিশালী পদ্ধতির ফলস্বরূপ ।
একইভাবে, অ্যাঙ্গুলারের মতো একটি আধুনিক ক্লায়েন্ট-সাইড কাঠামোটি কনভেনশন দ্বারা এমভিসি প্যাটার্ন অনুসরণ করে, তবে একটি পরিষেবা যুক্ত করে। মজার বিষয় হল, এটি মডেল-ভিউ-যা-ই হোক (এমভিডাব্লু) হিসাবে যুক্ত। ( স্ট্যাক ওভারফ্লোতে এই পোস্টটি দেখুন ।)
অতিরিক্তভাবে, অ্যাঙ্গুলার 2 এর মতো প্রগতিশীল ওয়েব ফ্রেমওয়ার্কগুলির উত্থানের সাথে আমরা পরিভাষাতে একটি পরিবর্তন এবং সম্ভবত একটি নতুন স্থাপত্য প্যাটার্ন দেখতে পাচ্ছি যেখানে উপাদানগুলি একটি ভিউ বা টেমপ্লেট সমন্বিত করে একটি পরিষেবার সাথে ইন্টারেক্ট করে - এগুলি সবই একটিতে থাকা থাকতে পারে মডিউল; এবং মডিউলগুলির একটি সিরিজ অ্যাপ্লিকেশন তৈরি করে।
আমি ভাবতাম এমভিসি এবং এমভিভিএম একই রকম। এখন ফ্লাক্সের অস্তিত্বের কারণে আমি পার্থক্যটি বলতে পারি:
এমভিসি-তে, আপনার অ্যাপ্লিকেশানের প্রতিটি দৃশ্যের জন্য আপনার কাছে একটি মডেল এবং একটি নিয়ামক রয়েছে, তাই আমি এটিকে ভিউ, মডেল দেখা, দেখার নিয়ামক বলব। প্যাটার্নটি আপনাকে জানায় না যে কীভাবে একটি দর্শন অন্যের সাথে যোগাযোগ করতে পারে। সুতরাং, বিভিন্ন ফ্রেমওয়ার্কে এর জন্য বিভিন্ন বাস্তবায়ন রয়েছে are উদাহরণস্বরূপ এমন বাস্তবায়ন রয়েছে যেখানে কন্ট্রোলাররা একে অপরের সাথে কথা বলে এবং অন্যান্য বাস্তবায়নে আরও একটি উপাদান রয়েছে যা তাদের মধ্যে মধ্যস্থতা করে। এমনকি এমন বাস্তবায়ন রয়েছে যেখানে ভিউ মডেলগুলি একে অপরের সাথে যোগাযোগ করে যা এমভিসি প্যাটার্নের বিরতি কারণ ভিউ মডেলটি কেবলমাত্র ভিউ নিয়ন্ত্রণকারী দ্বারা অ্যাক্সেস করা উচিত।
এমভিভিএম-এ, প্রতিটি উপাদানগুলির জন্য আপনার কাছে একটি ভিউ মডেলও রয়েছে। প্যাটার্নটি হ্যাক ভিউটি ভিউ মডেলকে কীভাবে প্রভাবিত করবে তা নির্দিষ্ট করে না, তাই বেশিরভাগ ফ্রেমওয়ার্কগুলি কেবলমাত্র ভিউ মডেলটিতে নিয়ামকের কার্যকারিতা অন্তর্ভুক্ত করে। তবে, এমভিভিএম আপনাকে জানায় যে আপনার ভিউ মডেলের ডেটা মডেল থেকে আসা উচিত, যা পুরো মডেল যা নির্দিষ্ট ভিউতে সচেতন বা কাস্টম নয়।
পার্থক্যটি প্রদর্শনের জন্য, আসুন ফ্লাক্স প্যাটার্নটি নেওয়া যাক। ফ্লাক্স প্যাটার্নটি জানায় যে অ্যাপে বিভিন্ন দর্শন কীভাবে যোগাযোগ করা উচিত। প্রতিটি দর্শন একটি স্টোর শোনায় এবং প্রেরক ব্যবহার করে অ্যাকশন চালায়। পাঠানোর পরিবর্তে সমস্ত স্টোরকে সবেমাত্র তৈরি করা কর্ম সম্পর্কে জানায় এবং স্টোরগুলি সেগুলি আপডেট করে। ফ্লাকসের একটি স্টোর এমভিভিএমের (সাধারণ) মডেলের সাথে সামঞ্জস্য করে। এটি কোনও নির্দিষ্ট দৃষ্টিতে কাস্টম নয়। সুতরাং সাধারণত যখন লোকেরা প্রতিক্রিয়া এবং ফ্লাক্স ব্যবহার করে, প্রতিটি প্রতিক্রিয়া উপাদানটি এমভিভিএম প্যাটার্নটি বাস্তবে প্রয়োগ করে। যখন কোনও ক্রিয়া ঘটে তখন ভিউ মডেল প্রেরণকারীকে কল করে এবং অবশেষে এটি স্টোরের পরিবর্তন অনুসারে আপডেট হচ্ছে যা মডেল। আপনি বলতে পারবেন না যে প্রতিটি উপাদান এমভিসি প্রয়োগ করে কারণ এমভিসিতে কেবলমাত্র নিয়ামক দর্শন মডেলটি আপডেট করতে পারেন।
এমভিসি হ'ল সার্ভার-সাইড এবং এমভিভিএম হ'ল ওয়েব বিকাশে ক্লায়েন্ট-সাইড (ব্রাউজার)।
জাভাস্ক্রিপ্ট বেশিরভাগ সময় ব্রাউজারে এমভিভিএম এর জন্য ব্যবহৃত হয়। এমভিসি এর জন্য অনেকগুলি সার্ভার সাইড প্রযুক্তি রয়েছে।
খুব সংক্ষেপে - এমভিসি কনট্রোলার (নিয়ন্ত্রণগুলি) দর্শন সম্পর্কে সচেতন, এমভিভিএম-এ, ভিউমোডেল এটি ব্যবহার করে তা সম্পর্কে অসচেতন। ভিউমোডেল এর পর্যবেক্ষণযোগ্য বৈশিষ্ট্য এবং ক্রিয়াগুলি যারাই এটির ব্যবহারে আগ্রহী হতে পারে তার কাছে প্রকাশ করে। ভিউমোডেলের মধ্যে ইউআইয়ের কোনও রেফারেন্স না থাকায় এই সত্যটি পরীক্ষাটি সহজ করে তোলে।
মডেল – ভিউ – কন্ট্রোলার (সাধারণত এমভিসি হিসাবে পরিচিত ) একটি সফ্টওয়্যার ডিজাইন প্যাটার্ন যা সাধারণত ব্যবহারকারী ইন্টারফেস বিকাশের জন্য ব্যবহৃত হয় যা সম্পর্কিত প্রোগ্রাম লজিককে তিনটি আন্তঃসংযুক্ত উপাদানগুলিতে বিভক্ত করে। ব্যবহারকারীর কাছে উপস্থাপনা এবং গ্রহণযোগ্য উপায়ে যেভাবে তথ্য অভ্যন্তরীণ উপস্থাপনাগুলি পৃথক করা হয় এটি করা হয়। এমভিসি আর্কিটেকচারাল প্যাটার্ন অনুসরণ করা কোডটিকে পুনরায় ব্যবহার এবং সমান্তরাল বিকাশের জন্য অনুমতি দেয় এই প্রধান উপাদানগুলিকে ডুপোল করে।
Desktopতিহ্যগতভাবে ডেস্কটপ গ্রাফিকাল ইউজার ইন্টারফেস (জিইউআই) এর জন্য ব্যবহৃত, এই প্যাটার্নটি ওয়েব অ্যাপ্লিকেশনগুলি ডিজাইনের জন্য জনপ্রিয় হয়ে উঠেছে। জাভা স্ক্রিপ্ট, পাইথন, রুবি, পিএইচপি, জাভা এবং সি # এর মতো জনপ্রিয় প্রোগ্রামিং ভাষার এমভিসি ফ্রেমওয়ার্ক রয়েছে যা ওয়েব অ্যাপ্লিকেশন বিকাশে সরাসরি বাক্সের বাইরে ব্যবহার করা হয়।
মডেল
প্যাটার্নের কেন্দ্রীয় উপাদান। এটি ব্যবহারকারীর ইন্টারফেসের চেয়ে আলাদা অ্যাপ্লিকেশনটির গতিশীল ডেটা কাঠামো। এটি সরাসরি ডেটা, যুক্তি এবং অ্যাপ্লিকেশনটির নিয়ম পরিচালনা করে।
দৃশ্য
চার্ট, চিত্র বা টেবিলের মতো তথ্যের কোনও উপস্থাপনা। একই তথ্যের একাধিক মতামত সম্ভব, যেমন পরিচালনার জন্য বার চার্ট এবং হিসাবরক্ষকদের জন্য একটি সারণী দর্শন।
নিয়ামক
ইনপুট গ্রহণ করে এবং মডেল বা দেখার জন্য আদেশগুলিতে রূপান্তর করে।
এই উপাদানগুলিতে অ্যাপ্লিকেশন ভাগ করার পাশাপাশি, মডেল – ভিউ – কন্ট্রোলার ডিজাইন তাদের মধ্যে মিথস্ক্রিয়া সংজ্ঞায়িত করে।
মডেলটি অ্যাপ্লিকেশনটির ডেটা পরিচালনা করার জন্য দায়বদ্ধ। এটি নিয়ামকের কাছ থেকে ব্যবহারকারী ইনপুট গ্রহণ করে।
ভিউ মানে কোনও নির্দিষ্ট বিন্যাসে মডেলটির উপস্থাপনা।
নিয়ামকটি ব্যবহারকারী ইনপুটটিতে সাড়া দেয় এবং ডেটা মডেল অবজেক্টগুলিতে ইন্টারঅ্যাকশন করে। কন্ট্রোলার ইনপুট গ্রহণ করে, allyচ্ছিকভাবে এটি বৈধ করে এবং তারপরে মডেলটির কাছে ইনপুটটি পাস করে।
মডেল – ভিউ – ভিউমোডেল (এমভিভিএম) একটি সফ্টওয়্যার স্থাপত্য নিদর্শন pattern
এমভিভিএম গ্রাফিকাল ইউজার ইন্টারফেসের বিকাশের একটি পৃথককরণকে সহায়তা করে - এটি মার্কআপ ল্যাঙ্গুয়েজ বা জিইউআই কোডের মাধ্যমে - ব্যবসায় যুক্তি বা ব্যাক-এন্ড লজিক (ডেটা মডেল) এর বিকাশ থেকে। এমভিভিএমের ভিউ মডেলটি একটি মান রূপান্তরকারী, যার অর্থ ভিউ মডেলটি মডেল থেকে ডেটা অবজেক্টগুলি এমনভাবে প্রদর্শন করা (রূপান্তরকরণ) করার জন্য দায়বদ্ধ যাতে অবজেক্টগুলি সহজেই পরিচালনা ও উপস্থাপিত হয়। এই ক্ষেত্রে, ভিউ মডেলটি একটি ভিউয়ের চেয়ে বেশি মডেল এবং ভিউয়ের সমস্ত ডিসপ্লে লজিক না হলে সবচেয়ে বেশি পরিচালনা করে। ভিউ মডেলটি মধ্যস্থতাকারী প্যাটার্নটি প্রয়োগ করতে পারে, ভিউ দ্বারা সমর্থিত ব্যবহারের কেসগুলির সেটটি ব্যাক-এন্ড লজিকের অ্যাক্সেসকে সংগঠিত করে।
এমভিভিএম হ'ল মার্টিন ফোলারের উপস্থাপনা মডেল ডিজাইনের ধরণটির একটি প্রকরণ। এমভিভিএম একইভাবে একটি দৃশ্যের অবস্থা এবং আচরণকে বিমূর্ত করে তোলে, তবে একটি উপস্থাপনা মডেল নির্দিষ্ট ইউজার-ইন্টারফেস প্ল্যাটফর্মের উপর নির্ভরশীল নয় এমনভাবে একটি দৃষ্টিভঙ্গি (একটি ভিউ মডেল তৈরি করে) এড়িয়ে যায়।
মাইক্রোসফ্ট আর্কিটেক্ট কেন কুপার এবং টেড পিটারস বিশেষত ইউজার ইন্টারফেসের ইভেন্ট-চালিত প্রোগ্রামিংকে সহজ করার জন্য এমভিভিএম আবিষ্কার করেছিলেন। প্যাটার্নটি উইন্ডোজ উপস্থাপনা ফাউন্ডেশন (ডাব্লুপিএফ) (মাইক্রোসফ্ট।। নেট গ্রাফিক্স সিস্টেম) এবং সিলভারলাইট (ডাব্লুপিএফ এর ইন্টারনেট অ্যাপ্লিকেশন ডেরাইভেটিভ) মধ্যে অন্তর্ভুক্ত করা হয়েছিল। মাইক্রোসফ্টের ডাব্লুপিএফ এবং সিলভারলাইট আর্কিটেক্টদের একজন জন গসম্যান 2005 সালে তার ব্লগে এমভিভিএম ঘোষণা করেছিলেন।
মডেল – ভিউ – ভিউমোডেলটিকে মডেল – ভিউ – বাইন্ডার হিসাবেও উল্লেখ করা হয়, বিশেষত। নেট প্ল্যাটফর্ম জড়িত না এমন বাস্তবায়নগুলিতে। জেডকে (জাভাতে লেখা একটি ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্ক) এবং নকআউটজেএস (একটি জাভাস্ক্রিপ্ট লাইব্রেরি) মডেল – ভিউ – বাইন্ডার ব্যবহার করে।