এমভিসি এবং এমভিভিএমের মধ্যে পার্থক্য কী? [বন্ধ]


1312

স্ট্যান্ডার্ড "মডেল ভিউ কন্ট্রোলার" প্যাটার্ন এবং মাইক্রোসফ্টের মডেল / ভিউ / ভিউমোডেল প্যাটার্নের মধ্যে কি পার্থক্য রয়েছে?


54
নোট করুন যে যখন এমভিভিএম মাইক্রোসফ্ট দ্বারা তৈরি হয়েছিল, প্রচুর পরিমাণে নন-মাইক্রোসফ্ট বিকাশকারী এবং প্রকল্পগুলি এই প্যাটার্নটি গ্রহণ করতে শুরু করেছে। এই মন্তব্যটি আপনার কাছে নিয়ে এসেছিল তবুও-এমএস-বিদ্বেষী বিভাগ।
BoltClock

1
দীর্ঘকাল এমভিভিএমের সাথে কাজ করার পরে, এমভিসির সাথে আমার প্রথম ব্রাশটি হতাশাগ্রস্থ হয়েছিল, যতক্ষণ না আমি শিখেছি আমি এমভিভিএমের মধ্যে পাওয়া বাইন্ডিং কৌশলগুলি ব্যবহার করে ব্রাউজারে ভিউমোডেলগুলি পিছনে পিছনে যেতে পারি। তবে জোয়েল যেমন উপরে বলেছিলেন ব্রাউজার থেকে রাষ্ট্র ফিরে পাওয়ার একমাত্র উপায় হ'ল একটি ফর্মের (যা নাম / মান ব্যবহার করে) জোড়া পরিবর্তন করে। আপনি যদি এই বিষয়টি ভাল না বুঝতে পারেন। এমভিসিতে আপনার খুব কষ্ট হবে। দেখার জন্য নিয়ামকটিকে নির্ভরতা ইনজেক্টর হিসাবে কেবল দেখুন এবং আপনি সমস্ত প্রস্তুত।
জন পিটারস

2
উচ্চ-স্তরের [ডিজাইনের ধরণগুলি] সম্পর্কে এই জাতীয় আপত্তিজনক প্রশ্ন। আমি দয়া করে উত্তরগুলিতে ডায়াগ্রামের ব্যবহারের পরামর্শ দিতে চাই।
রিকার্ডো

4
এখানে
জোলের

1
এমভিসি পদ্ধতির বিপরীতে, ভিউমোডেল কোনও নিয়ামক নয়। পরিবর্তে এটি বাইন্ডার হিসাবে কাজ করে যা ভিউ এবং মডেলের মধ্যে ডেটা আবদ্ধ করে। এমভিসি ফর্ম্যাটটি বিশেষত মডেল এবং দর্শনের মধ্যে উদ্বেগের পৃথকীকরণের জন্য তৈরি করা হয়েছে, যেখানে ডেটা-বাইন্ডিং সহ এমভিভিএম ফর্ম্যাটটি বিশেষভাবে ডিজাইন করা হয়েছে যাতে ভিউ এবং মডেলকে একে অপরের সাথে সরাসরি যোগাযোগ করতে দেয়। hackernoon.com/…
নীলার

উত্তর:


684

এমভিসি / এমভিভিএম কোনও / বা পছন্দ নয়।

দুটি প্যাটার্নগুলি এএসপি. নেট এবং সিলভারলাইট / ডাব্লুপিএফ বিকাশ উভয় ক্ষেত্রে বিভিন্ন উপায়ে ক্রপ হয়।

এএসপি.নেটের জন্য, এমভিভিএম অভ্যস্ত দর্শনগুলির মধ্যে দ্বি-মুখী বাঁধাই । এটি সাধারণত ক্লায়েন্ট-পার্শ্ব বাস্তবায়ন (যেমন নকআউট.জেএস ব্যবহার করে)। অন্যদিকে এমভিসি হ'ল সার্ভার-সাইডে উদ্বেগগুলি পৃথক করার একটি উপায় ।

সিলভারলাইট এবং ডাব্লুপিএফের জন্য, এমভিভিএম প্যাটার্নটি আরও পরিবেষ্টিত এবং উপস্থিত হতে পারে এমভিসি (অথবা সফ্টওয়্যারকে আলাদা দায়িত্বের মধ্যে পৃথক দায়িত্ব পালনের ব্যবস্থা করার) হিসাবে প্রতিস্থাপন হিসাবে কাজ । এক ধৃষ্টতা যে ঘন ঘন এই প্যাটার্ন বেরিয়ে আসেন, যে ছিল ViewModelকেবলমাত্র নিয়ামক প্রতিস্থাপিত MVC(যেন আপনি শুধু প্রতিস্থাপন পারে VMজন্য Cআদ্যক্ষরা এবং সব ক্ষমা করা হবে) ...

ভিউমোডেল অগত্যা পৃথক নিয়ন্ত্রকের প্রয়োজন প্রতিস্থাপন করে না

সমস্যাটি হ'ল: স্বতন্ত্রভাবে টেস্টযোগ্য *, এবং বিশেষত যখন প্রয়োজন হয় তখন পুনরায় ব্যবহারযোগ্য, একটি ভিউ-মডেল কোন দৃষ্টিভঙ্গি প্রদর্শন করে তা কোনও ধারণা রাখে না, তবে আরও গুরুত্বপূর্ণ ly কোনও ধারণা রাখে তার ডেটাটি কোথা থেকে আসে নয়

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

এমনকি এমভিভিএম-এ, নিয়ামকরা সাধারণত সমস্ত প্রসেসিং যুক্তি ধারণ করে এবং কোন ডেটা প্রদর্শন করতে হবে তা কোন সিদ্ধান্তে কোন মডেল ব্যবহার করে তা প্রদর্শন করবে।

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

আমরা অনুসরণ করা বেসিক MVCVM নির্দেশিকা হ'ল:

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

আমরা আরও লক্ষ করেছি যে ভাস্কর্য কোড-জেন ফ্রেমওয়ার্কটি এমভিভিএম এবং প্রিজমের অনুরূপ একটি প্যাটার্ন প্রয়োগ করে এবং এটি সমস্ত ব্যবহারের ক্ষেত্রে যুক্তি পৃথক করতে নিয়ন্ত্রণকারীদের বিস্তৃত ব্যবহার করে।

ধারণা করবেন না যে নিয়ন্ত্রণকারীরা ভিউ-মডেলগুলি দ্বারা অচল হয়ে গেছে।

আমি এই বিষয়টিতে একটি ব্লগ শুরু করেছি যা আমি যখন করতে পারি তখন যুক্ত করব । সাধারণ নেভিগেশন সিস্টেমগুলির সাথে এমভিসিভিএম সংযুক্ত করার বিষয়ে সমস্যা রয়েছে, কারণ বেশিরভাগ নেভিগেশন সিস্টেমগুলি কেবলমাত্র ভিউ এবং ভিএম ব্যবহার করে, তবে আমি পরবর্তী নিবন্ধগুলিতে এটিতে যাব।

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

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


8
@ টমাসজ জিলিনস্কি: সত্য, তবে "তারা কোথায় ব্যবহৃত হয়" তা প্রশ্ন (বা আমার উত্তরের মূল বিষয়) ছিল না। আমার বক্তব্য হ'ল নিয়ন্ত্রণকারীরা এখনও এমভিভিএমে দরকারী।
কোডিং গেছে

58
আমি রাজী. আমার মন্তব্য হঠাৎ জ্ঞানার্জনের কারণে হয়েছিল এবং এ কারণে নয় যে আমি আপনার সাথে দ্বিমত পোষণ করেছি।
টমাসজ জিলিয়াস্কি

উইজার্ডের মতো ইউআই-তে দর্শনের "প্রবাহ" নিয়ন্ত্রণ করতে আমরা নিয়ামকগুলিও ব্যবহার করি।
রিজেবোসচ

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

7
@ টমাসজিজিলিনস্কি এম (এমভিভিএম) সি
মোহাম্মদ ইমাদ ১

273

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

2000-এর দশকের মাঝামাঝি সময়ে যখন তারা জটিলতায় বেড়েছে, এমভিসি সফটওয়্যার ডিজাইনের ধরণ - যা প্রথম 1970 সালে বর্ণিত হয়েছিল - ওয়েব অ্যাপ্লিকেশনগুলিতে প্রয়োগ করা শুরু হয়েছিল। ডাটাবেস, এইচটিএমএল পৃষ্ঠাগুলি এবং কোড অভ্যন্তরীন মনে করুন। এমভিসি পৌঁছানোর জন্য এটি সামান্য একটু পরিমার্জন করা যাক: »ডাটাবেস For এর জন্য, আসুন ডাটাবেস প্লাস ইন্টারফেস কোডটি ধরে নেওয়া যাক। »এইচটিএমএল পৃষ্ঠাগুলি For এর জন্য আসুন এইচটিএমএল টেমপ্লেট প্লাস টেমপ্লেট প্রসেসিং কোড ধরে নেওয়া যাক। »কোড অন্তর্হীন« এর জন্য, কোডগুলি ম্যাপিং ব্যবহারকারীর ক্লিকগুলি ক্রিয়াতে ধরে নেওয়া যাক সম্ভবত ডাটাবেসকে প্রভাবিত করে, অবশ্যই অন্য একটি ভিউ প্রদর্শিত হবে। এটি কমপক্ষে এই তুলনার উদ্দেশ্যে।

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

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

এবং এই সমৃদ্ধ ডেস্কটপ উপায়টি সম্ভবত দ্বিতীয় সংক্ষিপ্ত বিবরণ এমভিভিএমের উদ্ভব হয়েছে। চিঠিগুলি দ্বারা বোকা বোকা বানাবেন না, সি এর বাদ দিয়ে এখনও নিয়ন্ত্রণকারীরা রয়েছেন। তাদের হওয়া দরকার। কিছুই সরানো হয় না। আমরা কেবল একটি জিনিস যুক্ত করি: রাষ্ট্রীয়তা, ক্লায়েন্টের উপর ক্যাশে হওয়া ডেটা (এবং এটির সাথে ডেটা পরিচালনা করার জন্য বুদ্ধিও থাকে)। সেই ডেটা, ক্লায়েন্টের মূলত একটি ক্যাশে, এখন »ভিউমোডেল called নামে পরিচিত« এটিই সমৃদ্ধ ইন্টারঅ্যাক্টিভিটির অনুমতি দেয়। এবং এটাই.

  • এমভিসি = মডেল, নিয়ামক, দর্শন = মূলত একমুখী যোগাযোগ = দুর্বল আন্তঃসংযোগ
  • এমভিভিএম = মডেল, নিয়ামক, ক্যাশে, দর্শন = দ্বি-মুখী যোগাযোগ = সমৃদ্ধ আন্তঃসংযোগ

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

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

 


47
এমভিসি ওয়েবে উত্পন্ন হয়নি। ট্রাইগভ রেইনসকাগ এমভিসিকে ১৯ Small০ এর দশকে স্মলটালক-76 into এ প্রবর্তন করেছিলেন।
অ্যারিয়াল্ডো মার্টিনি

11
এমনকি যদি এটিতে পরিবর্তন করা হয় তবে "এমভিসি ওয়েব অ্যাপ্লিকেশন ডিজাইনের মাধ্যমে জনপ্রিয় হয়েছিল।" আমি যুক্তি দিয়ে বলব যে এটি যথাযথ উদ্ধৃতি ছাড়াই জল্পনা।
ড্যান বেচার্ড

4
আড়িয়াল্ডো: ধন্যবাদ, আমি ছোট্টালক-76 about সম্পর্কে জানতাম না। (ততক্ষণে অন্যান্য খেলনা নিয়ে খেলেছি :) :) কৌতুকগুলি একপাশে রেখে দিন, মজার বিষয় এইগুলির মধ্যে কয়েকটি ধারণাগুলি কত পুরানো। - @ ড্যান, আমি যা লিখেছি তা হ'ল: "[এমভিসি] সেখানে [ওয়েব] এর আগে থাকতে পারত, তবে ওয়েব এটি কীভাবে ওয়েব বিকাশকারীদের কাছে জনপ্রিয় হয়েছিল"। আমি এখনও মনে করি এটি সঠিক। এর জন্য আমার কাছে কোনও প্রশংসাপত্র নেই, তবে তখন আমার কোনও দরকার মনে হয় না কারণ গত দশকের শুরুতে আমি যখন ওয়েব বিকাশকারী হিসাবে কাজ শুরু করি তখন এমভিসি গণপরিচয়টি আমার ব্যক্তিগত অভিজ্ঞতার অংশ। এমপিসির জন্য প্রচুর মটরশুটি নিয়ে অ্যাপাচি স্ট্রুটস তখন প্রচলিত ছিল।
লুমি

5
এমভিসি হ'ল মূলত একমুখী যোগাযোগ "নয় কারণ ব্রাউজারগুলি সারাক্ষণ গেটস এবং পোস্ট জারি করে। গেটস এবং পোস্ট উভয়ই ক্যোয়ারী স্ট্রিংয়ে পাওয়া ক্ষেত্রের মানগুলি পরিবর্তন করতে পারে। এটি ব্রাউজারগুলিকে নিয়ামকের কাছে তথ্য ফেরত পাঠানোর যথেষ্ট সুযোগ দেয়। এমভিসি এইচটিটিপি ১.০ এর শীর্ষে নির্মিত হয়েছিল যা সর্বদা দ্বিপক্ষীয় মনের কথা মনে রেখেছিল।
জন পিটারস

13
ধন্যবাদ লুমি এটি অন্যান্য উত্তরগুলির চেয়ে আমার কাছে অনেক বেশি অর্থবোধ করেছে। এটা কি ঠিক? আমার কোন ধারণা নাই. তবে আমার দৃষ্টিকোণ থেকে এটি অন্তত সুসংগত ছিল।
জিসিদেব

175

এমভিভিএম মডেল-ভিউ ভিউমোডেল এমভিসি, মডেল-ভিউ কন্ট্রোলারের সাথে সমান

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

রাসেল ইস্ট এমভিভিএম কেন এমভিসি থেকে আলাদা সে সম্পর্কে বিস্তারিতভাবে একটি ব্লগ আলোচনা করছে


81
"দ্য কন্ট্রোলারটি একটি ভিউ মডেলের সাথে প্রতিস্থাপন করা হয়" বাক্যটি সঠিক নয়। এমভিভিএম-এ নিয়ামকের ভূমিকা কী করে তা ডেটাবাইন্ডিং হয় (বা যদি আপনি এটি ব্যবহার করেন তবে কনভেনশন দ্বারা বাধ্যতামূলক)।
ড্যানসিইসি

9
এমপিভিএম কেবলমাত্র ডাব্লুপিএফ-এর দ্বিমুখী ডেটা বন্ডিং ব্যবহার করার সময় অর্থবোধ করতে পারে। অন্যথায় এমভিসি / এমভিপি ইত্যাদি যথেষ্ট হবে।
জেফ

265
@ ড্যানিসিএইচ: জোশ স্মিথ: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. …
sll করুন

7
@ ওমশঙ্কর 11 তম নিজের থেকে নয়। এখানে মোট 10 জন লোক এবং 12 টি মতামত রয়েছে। উক্ত প্রবন্ধটি বোঝাতে বোঝানো হয়েছে যে এই নিদর্শনগুলির সংজ্ঞাগুলি ব্যাখ্যার জন্য এতটাই উন্মুক্ত যে কমপক্ষে দু'জন লোক একাধিক মতামত পাওয়ার জন্য যথেষ্ট বিভ্রান্ত হবে।
ড্যান বেচার্ড

7
@ ড্যানিসিই আচ্ছা এটি আসলে ডাব্লুপিএফের ডেটা বাঁধাইয়ের বিষয়, এবং মাইক্রোসফ্ট এমভিভিএম আবিষ্কার করেছিল যেটিতে একজন সম্পূর্ণরূপে নিয়ন্ত্রণকারীকে বাইপাস করতে পারে, ("নিয়ন্ত্রককে একটি ভিউ মডেলের সাথে প্রতিস্থাপন করা হচ্ছে" বাক্যটি দাবি করা হয়েছে বলে ভুল হয়েছে বলে দাবি করা হয়েছে) পর্দার আড়ালে একটি নিয়ামক, মূলত "উচ্চ স্তরের ভাষা ক্রিপ্টিক মেশিন কোডের ব্যবহার আরও পাঠযোগ্য" এর সাথে প্রতিস্থাপনের দাবির মতো বলে দাবি করার মতো হয় কারণ পর্দার পিছনে মেশিনের ভাষা এখনও ব্যবহৃত হচ্ছে ...)
yoel halb

91

এক কিছুর জন্য, এমভিভিএম হ'ল এমভিসি প্যাটার্নের অগ্রগতি যা প্রদর্শন পরিচালনা করতে এক্সএএমএল ব্যবহার করে। এই নিবন্ধটি দুটির কয়েকটি দিকের রূপরেখা তুলে ধরেছে।

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


20
আমি মনে করি আপনি যে অনুচ্ছেদে উদ্ধৃত করেছেন তা সুন্দরভাবে IMHO এর সমষ্টি করে। ভিউমোডেলের একটি দিক হ'ল এটি দেখার জন্য মডেলের একটি সমতল / পরিবর্তিত সংস্করণ। আরও অনেক এমভি * নিদর্শন আসল মডেলের বিরুদ্ধে বাঁধাই করে ।
ড্যানিয়েল অাগার

1
"আরও অনেক এমভি * নিদর্শন আবার আসল মডেলটিকে আবদ্ধ করে
ফেলেছে

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

@ নোক্টুরনে ড্যানিয়েল যা বলেছিল তা হ'ল আনুষ্ঠানিকভাবে সমস্ত এমভি * একটি পৃথক ভিএম ব্যবহার করা উচিত, অনেক বিকাশকারী কেবল এটিকে উপেক্ষা করে প্রকৃত মডেলটি পাস করতে পারেন এবং এমভিসি উদাহরণ হিসাবে নির্দিষ্টকরণের মধ্যে কিছুই এটিকে অস্বীকার করে না, তবে এমভিভিএম-তে একটি মডেল এবং দর্শনের মধ্যে রূপান্তরের জন্য
কোনও ভিএমকে অবশ্যই দায়বদ্ধ করে তোলা উচিত

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

52

মাইক্রোসফ্ট এখানে উইন্ডোজ পরিবেশে এমভিভিএম প্যাটার্ন একটি ব্যাখ্যা প্রদান

এখানে একটি গুরুত্বপূর্ণ বিভাগ:

মডেল-ভিউ-ভিউমোডেল ডিজাইন প্যাটার্নে একটি অ্যাপ তিনটি সাধারণ উপাদান নিয়ে গঠিত। এখানে চিত্র বর্ণনা লিখুন

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

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

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


7
মনে রাখবেন যে নিবন্ধটি রেফারেন্স মাইক্রোসফ্ট স্ট্যাক - বিশেষত উইন্ডোজ ফোন - এবং এক্সএএমএল এর সাথে বিকাশের ক্ষেত্রে প্রযোজ্য, এটি হওয়ার দরকার নেই।
রিচার্ড ন্যালিজেনস্কি

এই উত্তরটি "এমভিভিএম" নামে সমস্যাটি তুলে ধরে - এটি "ভিভিএমএম" বা "এমভিএমভি" হওয়া উচিত - এমভি-ভিএমের সাথে সম্পর্কগুলি পুরোপুরি ভুল পথে থাকে!
ইথারম্যান

45

আমি ভেবেছিলাম মূল পার্থক্যগুলির মধ্যে একটি হ'ল এমভিসিতে আপনার ভি সরাসরি আপনার এম পড়েন, এবং সিটি দিয়ে ডেটা ম্যানিপুলেট করার জন্য যান, অন্যদিকে এমভিভিএম-এ আপনার ভিএম এম প্রক্সির কাজ করে, পাশাপাশি আপনাকে উপলব্ধ কার্যকারিতা সরবরাহ করে ভি

আমি যদি আবর্জনায় পূর্ণ না হয়ে থাকি, আমি অবাক হয়ে যাই যে কেউ হাইব্রিড তৈরি করেনি, যেখানে আপনার ভিএম কেবলমাত্র একটি এম প্রক্সি, এবং সি সমস্ত কার্যকারিতা সরবরাহ করে।


1
+1 টি। শব্দটি আমার মনে হয় সঠিক। তবে হাইব্রিড এম-এমপ্রোক্সি-ভিসি তৈরির বিষয়ে কি খুব বেশি বিচ্ছেদ হয় না? আমি মনে করি এটি এমভিসি ব্যবহার করে যথেষ্ট হবে যখন এম বাইন্ডিংয়ের সম্পূর্ণ সমর্থন সহ একটি মডেল। ;)
ktutnik

2
+1 টি। আমি উপরে মন্তব্য হিসাবে, আমি মনে করি যে MVC পুরো (ওয়েব) অ্যাপ্লিকেশন স্থপতি করতে ব্যবহৃত হয়, যখন MVVM এমভিসির ভিউ উপাদানটির ভিতরে ব্যবহার করা হয়।
টমাসজ জিয়েলসিস্কি

23
@ কেট্টুতনিক: মডেলটি সাধারণত সার্ভারে বসে থাকে, যেখানে ভিউমোডেল ক্লায়েন্টের উপরে থাকে। সুতরাং এইচটিএমএলটির পক্ষে সরাসরি সার্ভার-সাইড মডেল বাঁধাই সম্ভব নয়। অতএব আমাদের মডেলভিউ প্রয়োজন যা স্থানীয়, অরক্ষিত ওয়ার্কিং ডেটা যেমন মডেল থেকে আহৃত উদাহরণস্বরূপ এজেএক্স / জেএসএন ব্যবহার করে।
টমাসজ জিয়েলসিস্কি

1
দৃশ্যটি মডেল ডেটাটি সত্যই "পড়তে" পারে কারণ এটি ইতিমধ্যে নিয়ামক সেখানে রেখেছেন। আমি এটি নিয়ন্ত্রণকারীর দ্বারা "ডেটা ইনজেকশন" হিসাবে উল্লেখ করতে পছন্দ করি কারণ এটি সত্যিকার অর্থে দায়িত্বে থাকা নিয়ন্ত্রণকারী। সমস্ত দর্শন আমার মনের মধ্যে রেন্ডার এবং আগুন ইভেন্টগুলিতে করে।
জন পিটারস

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

23

সাধারণ পার্থক্য: (ইয়াকভের কোর্সেরা অ্যাঙ্গুলারজেএস কোর্সে অনুপ্রাণিত)

এখানে চিত্র বর্ণনা লিখুন

এমভিসি (মডেল ভিউ কন্ট্রোলার)

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

MVVM (মডেল ভিউ মডেল)

ViewModel :

  1. এটি দৃষ্টিভঙ্গির রাজ্যের প্রতিনিধিত্ব।
  2. এটি ভিউতে প্রদর্শিত ডেটা ধারণ করে।
  3. ইভেন্টগুলি দেখার জন্য প্রতিক্রিয়া, ওরফে উপস্থাপনা যুক্তি।
  4. ব্যবসায় যুক্তিযুক্ত প্রক্রিয়াজাতকরণের জন্য অন্যান্য কার্যকারিতা কল করে।
  5. ভিউটিকে সরাসরি কোনও কিছু প্রদর্শন করতে বলবে না।

23

এমভিসি একটি নিয়ন্ত্রিত পরিবেশ এবং এমভিভিএম একটি প্রতিক্রিয়াশীল পরিবেশ।

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

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

একটি এমভিসি ডেস্কটপ বা ক্লায়েন্টের পাশের অ্যাপ্লিকেশনটিতে আপনার একটি মডেল থাকা উচিত এবং মডেলটি নিয়ামক দ্বারা ব্যবহার করা উচিত। মডেলটির উপর ভিত্তি করে নিয়ামক দেখুনটি সংশোধন করবে। ভিউগুলি সাধারণত ইন্টারফেসের সাথে নিয়ন্ত্রণকারীদের সাথে আবদ্ধ থাকে যাতে কন্ট্রোলার বিভিন্ন দৃশ্যের সাথে কাজ করতে পারে। এএসপি.এনইটি-তে এমভিসির জন্য যুক্তিটি সার্ভারে কিছুটা পিছনের দিকে থাকে কারণ কন্ট্রোলার মডেলগুলি পরিচালনা করে এবং একটি নির্বাচিত দৃশ্যে মডেলগুলিকে পাস করে। ভিউটি তখন মডেলের উপর ভিত্তি করে ডেটা দিয়ে পূর্ণ হয় এবং এর নিজস্ব যুক্তি রয়েছে (সাধারণত আরও একটি এমভিসি সেট যেমন অ্যাংুলারজেএস দিয়ে করা)। লোকেরা তর্ক করবে এবং এটিকে অ্যাপ্লিকেশন এমভিসির সাথে বিভ্রান্ত করবে এবং প্রকল্পটি রক্ষণাবেক্ষণের পরিণতিতে বিপর্যয়ে পরিণত হবে এমন উভয়ই করার চেষ্টা করবে। এমভিসি ব্যবহার করার সময় সর্বদা যুক্তি ও নিয়ন্ত্রণকে এক জায়গায় রাখুন। কন্ট্রোলার বা মডেল ডেটা সামঞ্জস্য করার জন্য ভিউ (বা ওয়েবের জন্য জেএস এর মাধ্যমে ভিউতে) এর পিছনে কোডটিতে ভিউ লজিকটি লিখবেন না। কন্ট্রোলার দর্শন পরিবর্তন করতে দিন। কেবলমাত্র যুক্তি যা একটি ভিউতে বাস করা উচিত তা হ'ল এটি যে ইন্টারফেসটি ব্যবহার করছে তা তৈরি এবং চালানোর জন্য যা লাগে। এর একটি উদাহরণ একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড জমা দেওয়া। ডেস্কটপ বা ওয়েব পৃষ্ঠা (ক্লায়েন্টে) কন্ট্রোলারের জমা দেওয়ার প্রক্রিয়াটি পরিচালনা করা উচিত যখনই ভিউ জমা দেওয়ার ক্রিয়াকলাপটি প্রকাশ করে। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি সর্বদা আপনার এমভিসি ওয়েব বা স্থানীয় অ্যাপের চারপাশে সহজেই আপনার পথ খুঁজে পেতে পারেন। ডেস্কটপ বা ওয়েব পৃষ্ঠা (ক্লায়েন্টে) কন্ট্রোলারের জমা দেওয়ার প্রক্রিয়াটি পরিচালনা করা উচিত যখনই ভিউ জমা দেওয়ার ক্রিয়াকলাপটি প্রকাশ করে। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি সর্বদা আপনার এমভিসি ওয়েব বা স্থানীয় অ্যাপের চারপাশে সহজেই আপনার পথ খুঁজে পেতে পারেন। ডেস্কটপ বা ওয়েব পৃষ্ঠা (ক্লায়েন্টে) কন্ট্রোলারের জমা দেওয়ার প্রক্রিয়াটি পরিচালনা করা উচিত যখনই ভিউ জমা দেওয়ার ক্রিয়াকলাপটি প্রকাশ করে। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি সর্বদা আপনার এমভিসি ওয়েব বা স্থানীয় অ্যাপের চারপাশে সহজেই আপনার পথ খুঁজে পেতে পারেন।

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

এখানে একটি সামান্য উদাহরণ রয়েছে: আসুন আমরা বলি যে আপনি একটি বোতাম টিপে একটি মেনু স্লাইড পেতে চান। এমভিসিতে আপনার ইন্টারফেসে একটি মেনুপ্রেসড ক্রিয়া থাকবে। আপনি মেনু বোতামটি ক্লিক করেন এবং তারপরে স্লাইডমেনুআইনের মতো অন্য কোনও ইন্টারফেস পদ্ধতির উপর ভিত্তি করে মেনুতে স্লাইড করতে ভিউটি বলবেন যখন নিয়ন্ত্রকটি জানতে পারবে। কোন কারণে একটি রাউন্ড ট্রিপ? কন্ট্রোলার সিদ্ধান্ত নেয় আপনি এর বদলে অন্য কিছু করতে বা করতে চান না। কন্ট্রোলার যদি না বলে থাকে তবে কিছুই করা ছাড়া ভিউয়ের সাথে ভিউয়ের দায়িত্বে থাকা উচিত। যাহোক; এমভিভিএম-এ অ্যানিমেশনের স্লাইড মেনুটি জেনেরিক এবং জেনারিক আকারে তৈরি করা উচিত এবং পরিবর্তে এটি স্লাইড করতে বলা হওয়ার কারণে কিছু মানের ভিত্তিতে এটি করবে। সুতরাং এটি ভিউমোডেল শুনে এবং যখন ভিউমোডেল বলে, ইসমেনুএ্যাকটিভ = সত্য (বা তবে) এর জন্য অ্যানিমেশনটি স্থান নেয়। এখন, এর সাথে আমি বলেছিলাম যে আমি আরেকটি বিষয় সত্যই পরিষ্কার করতে চাই এবং দয়া করে মনোযোগ দিন। ইসমেনুএ্যাকটিভ সম্ভবত বিএড এমভিভিএম বা ভিউমোডেল ডিজাইন। ভিউমোডেল ডিজাইন করার সময় আপনার কখনই ধারণা করা উচিত নয় যে কোনও ভিউয়ের কোনও বৈশিষ্ট্যই থাকবে এবং কেবল অনুবাদিত মডেল রাজ্যটি উত্তীর্ণ হবে। যদি আপনি মেনু অপসারণ করতে এবং নিজের দৃষ্টিভঙ্গি পরিবর্তন করার সিদ্ধান্ত নিয়ে থাকেন এবং কেবল অন্য উপায়ে ডেটা / বিকল্পগুলি দেখান, তবে ভিউমোডেল কিছুতেই পাত্তা দেয় না। সুতরাং আপনি মেনু পরিচালনা করবেন কিভাবে? যখন ডেটা বোঝা যায় যে কিভাবে। সুতরাং, এটি করার একটি উপায় হ'ল মেনুটিকে বিকল্পগুলির একটি তালিকা দেওয়া (সম্ভবত অভ্যন্তরীণ ভিউমোডেলগুলির একটি অ্যারে)। যদি সেই তালিকায় ডেটা থাকে তবে মেনুটি তখন ট্রিগারটির মাধ্যমে খুলতে জানে, যদি না হয় তবে এটি ট্রিগারটির মাধ্যমে লুকিয়ে রাখতে জানে। আপনার কাছে কেবল ভিউমোডেলে মেনুটির জন্য ডেটা রয়েছে বা না। ভিউমোডেলে সেই ডেটাটি দেখানোর / আড়াল করার সিদ্ধান্ত নেবেন না .. কেবলমাত্র মডেলের রাজ্যটি অনুবাদ করুন। এই উপায়টি সম্পূর্ণ প্রতিক্রিয়াশীল এবং জেনেরিক এবং বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে।

যদি আপনি ইতিমধ্যে প্রতিটিটির স্থাপত্যের সাথে কমপক্ষে কিছুটা পরিচিত না হয়ে থাকেন এবং এটি খুব বিভ্রান্তিকর হতে পারে তবে নেটে আপনার প্রচুর খারাপ তথ্য পাবেন বলে এই সমস্ত কিছু সম্ভবত একেবারেই অর্থবহ নয়।

সুতরাং ... এই অধিকার পেতে জিনিসগুলি মনে রাখা উচিত। কীভাবে আপনার অ্যাপ্লিকেশনটি ডিজাইন করবেন এবং এটিতে স্টিক করুন front

আপনি যদি এমভিসি করেন, যা দুর্দান্ত then তবে নিশ্চিত হয়ে নিন যে আপনি কন্ট্রোলার পরিচালনাযোগ্য এবং আপনার দর্শনের সম্পূর্ণ নিয়ন্ত্রণে রয়েছেন। আপনার যদি একটি বড় ভিউ থাকে তবে বিভিন্ন কন্ট্রোলার রয়েছে এমন ভিউতে নিয়ন্ত্রণ যুক্ত করার বিষয়টি বিবেচনা করুন। কেবলমাত্র এই নিয়ন্ত্রকদের বিভিন্ন নিয়ামককে ক্যাসকেড করতে হবে না। বজায় রাখতে খুব হতাশাব্যঞ্জক। কিছুক্ষণ সময় নিন এবং জিনিসগুলি পৃথকভাবে এমনভাবে ডিজাইন করুন যা পৃথক উপাদান হিসাবে কাজ করবে ... এবং সর্বদা কন্ট্রোলার মডেলকে স্টোরেজ প্রতিশ্রুতিবদ্ধ বা চালিয়ে যেতে বলুন। এমভিসি-র জন্য আদর্শ নির্ভরতা সেটআপ হ'ল ভিউ-কন্ট্রোলার → মডেল বা এএসপি.নেট (আমাকে আরম্ভ করবেন না) মডেল ← ভিউ ↔ কন্ট্রোলার → মডেল (যেখানে মডেল একই বা সম্পূর্ণ ভিন্ন মডেল হতে পারে নিয়ন্ত্রণকারীর থেকে দেখতে)... অবশ্যই এই সময়ে ভিউতে নিয়ন্ত্রকের সম্পর্কে জানা দরকার কেবলমাত্র কোনও মডেল পাস করতে হবে তা জানার জন্য শেষ পয়েন্টের রেফারেন্সের জন্য।

আপনি যদি এমভিভিএম করেন, আমি আপনার সদয় আত্মাকে আশীর্বাদ করব, তবে এটি সঠিকভাবে করার জন্য সময় নিই! এক জন্য ইন্টারফেস ব্যবহার করবেন না। আপনার ভিউটিকে কীভাবে মানগুলির উপর ভিত্তি করে দেখা যাচ্ছে তা সিদ্ধান্ত নিতে দিন। মক ডেটা দিয়ে ভিউ দিয়ে খেলুন। আপনি যদি এমন কোনও ভিউ শেষ করেন যা আপনাকে মেনু দেখাচ্ছে (উদাহরণ হিসাবে) যদিও আপনি সেই সময়ে এটি না চান তবে ভাল। আপনার দৃষ্টিভঙ্গি যেমনটি করা উচিত কাজ করছে এবং এটির মানগুলির উপর নির্ভর করে প্রতিক্রিয়া করছে। যখন ভিউমোডেল কোনও নির্দিষ্ট অনুবাদকৃত অবস্থায় থাকে বা ভিউমোডেলকে এই অবস্থাটি খালি করার নির্দেশ দেয় তখন এটি না ঘটে তা নিশ্চিত করতে আপনার ট্রিগারটিতে আরও কয়েকটি প্রয়োজনীয়তা যুক্ত করুন। আপনার ভিউমোডলে এটিকে অভ্যন্তরীণ যুক্তি দিয়ে মুছে ফেলবেন না যেন আপনি সেখান থেকে স্থির করছেন যে ভিউটি দেখতে হবে কিনা। মনে রাখবেন আপনি ভিউমোডেলে মেনু আছে বা নেই তা ধরে নিতে পারবেন না। এবং পরিশেষে, মডেলটি কেবল আপনাকে পরিবর্তনের অনুমতি দেয় এবং সম্ভবত স্টোরের স্টেট। এখানেই বৈধতা এবং সমস্ত ঘটবে; উদাহরণস্বরূপ, যদি মডেল রাষ্ট্রটি পরিবর্তন করতে না পারে তবে তা কেবল নিজেকে নোংরা বা কিছু হিসাবে চিহ্নিত করবে। যখন ভিউমোডেল এটি বুঝতে পারে তখন এটি কী নোংরা তা অনুবাদ করবে এবং ভিউটি তখন এটি উপলব্ধি করবে এবং অন্য ট্রিগারটির মাধ্যমে কিছু তথ্য প্রদর্শন করবে। ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত রাজ্যটিকে পরিবর্তন করুন তবে এটি কেবল নিজেকে নোংরা বা কিছু হিসাবে পতাকাঙ্কিত করবে। যখন ভিউমোডেল এটি বুঝতে পারে তখন এটি কী নোংরা তা অনুবাদ করবে এবং ভিউটি তখন এটি উপলব্ধি করবে এবং অন্য ট্রিগারটির মাধ্যমে কিছু তথ্য প্রদর্শন করবে। ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত রাজ্যটিকে পরিবর্তন করুন তবে এটি কেবল নিজেকে নোংরা বা কিছু হিসাবে পতাকাঙ্কিত করবে। যখন ভিউমোডেল এটি বুঝতে পারে তখন এটি কী নোংরা তা অনুবাদ করবে এবং ভিউটি তখন এটি উপলব্ধি করবে এবং অন্য ট্রিগারটির মাধ্যমে কিছু তথ্য প্রদর্শন করবে। ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিত ভিউয়ের সমস্ত ডেটা ভিউমোডেলে বাঁধাই করা যায় যাতে সবকিছু কেবলমাত্র গতিশীল হতে পারে এবং ভিউমোডেলের সাথে বাইন্ডিংয়ের সাথে কীভাবে প্রতিক্রিয়া হবে তা সম্পর্কে কোনও ধারণা নেই। প্রকৃতপক্ষে মডেলটির ভিউমোডেলের কোনও ধারণা নেই। নির্ভরতা সেট আপ করার সময় তাদের ঠিক তেমন পছন্দ করা উচিতদেখুন M ভিউমোডেল → মডেল (এবং এখানে একটি পার্শ্ব নোট ... এবং এটি সম্ভবত তর্ক করা হবে তবে আমি পাত্তা দিচ্ছি না ... মোডেলটি অপরিবর্তনীয় না হলে মডেলটি পাস করবেন না; অন্যথায় এটি দিয়ে মুড়ে রাখুন যথাযথ ভিউমোডেল The ভিউটি কোনও মডেল পিরিয়ড দেখতে পাবে না I

এখানে আমার চূড়ান্ত টিপ ... একটি ভাল নকশাযুক্ত, তবুও খুব সাধারণ, এমভিসি অ্যাপ্লিকেশনটি দেখুন এবং এমভিভিএম অ্যাপ্লিকেশনটির জন্য এটি করুন। একের সীমাবদ্ধ শূন্য নমনীয়তা সহ আরও নিয়ন্ত্রণ থাকবে এবং অন্যটির নিয়ন্ত্রণ এবং সীমাহীন নমনীয়তা থাকবে না।

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

আমি যদি আপনাকে বিভ্রান্ত না করি তবে আমার সাথে যোগাযোগ করার চেষ্টা করুন ... চিত্রণ এবং উদাহরণ সহ পুরো বিশদভাবে এটি নিয়ে যেতে আমার আপত্তি নেই।

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


আশ্চর্যজনকভাবে বিস্তারিত এবং সঠিক উত্তর! এটি আমার জন্য স্ফটিক-পরিষ্কার করে তুলেছে। :-)
ankush981

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

1
সত্যি কথা বলতে কি, আমার এমভিভিএম জ্ঞানটি বছরের পর বছর বা পরীক্ষার মাধ্যমে এবং ত্রুটির মাধ্যমে হয়েছে এবং এটি টিমের প্রচেষ্টার ভিত্তিতে বিভিন্নভাবে ব্যবহার / করা হয়েছে through আমি সম্প্রতি (২ বছর আগে) নিজের অভিজ্ঞতাটি সংক্ষিপ্ততর গেম পরিকল্পনায় রাখতে পেরেছিলাম এবং একটি দলকে এটি করা শেষ করতে নেতৃত্ব দিতে সক্ষম হয়েছিল এবং আমরা অত্যন্ত সফল হয়েছি। এটি বলেছিল, আমি আপনাকে কোনও একটি জায়গায় চিহ্নিত করতে এবং ক্ষমা চাইতে পারি না। আমি বলতে পারি যে আপনি সঠিক, বিভিন্ন মতের কারণে এটি খুব বিভ্রান্তিকর তবে আইএমও, এমভিভিএমের সাথে এটি যতটা সম্ভব জেনেরিক হওয়া উচিত। ভিউমোডেলগুলি দৃশ্যের সাথে বাঁধাগুলি রাখতে এবং ডেটা দিয়ে কঠোরভাবে কাজ করার অনুমতি দেওয়ার পক্ষে সক্ষম করুন তবে কোনও দেখার জন্য ...
মাইকেল পেকেট II

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

আমার কাছে এমন অ্যাপ্লিকেশন রয়েছে যা আমি ভাগ করে নিতে আপত্তি করি না এবং একটি সাধারণ অনুষ্ঠান সেট আপ করতে বা আপনার আপত্তি বা কৌতূহলী হলে আপনার বা অন্য কারও জন্য বলার বিষয়ে কিছু মনে করবে না।
মাইকেল পকেট দ্বিতীয়

18

এমভিভিএম হ'ল উপস্থাপনা মডেল প্যাটার্নের একটি সংশোধন (বিতর্কযোগ্য) । আমি বিতর্কযোগ্য বলি, কারণ ডাব্লুপিএফ কীভাবে ডেটা বাইন্ডিং এবং কমান্ড হ্যান্ডলিংয়ের ক্ষমতা সরবরাহ করে তার মধ্যে পার্থক্য।


1
২০০৯ সালে এই উত্তরটি সম্ভবত একটি উত্তম ছিল তবে আজকের দিনে কোনও বিতর্ক নেই কারণ এমএসএফটি থেকে এইচটিএমএল সহায়কও কুখ্যাত "ফর" সাহায্যকারীদের সাহায্যে বাঁধাইয়ের অনুমতি দেয়। নকআউট ক্লায়েন্টের পক্ষে ডেটা-বাঁধাই সম্পর্কে।
জন পিটারস

1
আমি এটি 2009 সালে বলেছিলাম, কারণ সম্প্রদায়ের অনেক লোক এই উত্তরটি গ্রহণ করেছে। আমি বলেছিলাম এটি বিতর্কযোগ্য, কারণ এমভিভিএম এবং উপস্থাপনা মডেল সত্যিই বিভিন্ন নামে একই প্যাটার্ন। ডাব্লুপিএফ-এর জনপ্রিয়তার দিক থেকে এটি আজ অন্য ফ্রেমওয়ার্কগুলিতে প্রায়শই এমভিভিএম নামে পরিচিত তবে উভয়ের নামই সঠিক is
wekempf

15

ভিউ মডেলটি আপনার ব্যবহারকারী ইন্টারফেসের উপাদানগুলির জন্য একটি "বিমূর্ত" মডেল। এটি আপনাকে অবশ্যই অ-ভিজ্যুয়াল উপায়ে কমান্ডগুলি এবং আপনার দৃষ্টিতে ক্রিয়াগুলি কার্যকর করতে দেয় (উদাহরণস্বরূপ এটি পরীক্ষা করার জন্য)।

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

এমভিভিএম প্যাটার্নটি হ'ল সমস্ত অনুশীলনের উপাদানগুলির কাছে সেই অনুশীলনের সাধারণকরণ।

এবং এটি কোনও মাইক্রোসফ্ট প্যাটার্ন নয়, সংযুক্তিগুলি হ'ল এই প্যাটার্নটির সাথে কাজ করার জন্য ডাব্লুপিএফ / সিলভারলাইট ডেটা-বাইন্ডিংগুলি বিশেষভাবে উপযুক্ত। উদাহরণস্বরূপ, জাভা সার্ভারের মুখগুলি ব্যবহার করে আপনাকে কোনও কিছুই থামায় না।


13

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

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

ব্যবহারকারী: ক্লিক করুন ...

দেখুন : কে সে? [ এমভিভিএম | এমভিপি | এমভিসি ]

ব্যবহারকারী: আমি সন্ধানের বোতামটিতে ক্লিক করেছি ...

দেখুন : ঠিক আছে, একটি সেকেন্ড ধরে রাখুন…। [ এমভিভিএম | এমভিপি | এমভিসি ]

( ভিউমোডেলকে কল করা দেখুন | উপস্থাপক | নিয়ন্ত্রক …) [ এমভিভিএম | এমভিপি | এমভিসি ]

দেখুন : আরে ভিউমোডেল | উপস্থাপক | কন্ট্রোলার , একজন ব্যবহারকারী সবেমাত্র অনুসন্ধান বোতামে ক্লিক করেছেন, আমি কী করব? [ এমভিভিএম | এমভিপি | এমভিসি ]

ভিউমোডেল | উপস্থাপক | কন্ট্রোলার : আরে ভিউ , সেই পৃষ্ঠাতে কোনও অনুসন্ধান শব্দ রয়েছে? [ এমভিভিএম | এমভিপি | এমভিসি ]

দেখুন : হ্যাঁ,… এটি এখানে… "পিয়ানো" [ এমভিভিএম | এমভিপি | এমভিসি ]

M এটি এমভিভিএম এবং এমভিপি | এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ পার্থক্য এমভিসি ———

উপস্থাপকের : ধন্যবাদ দেখুন ... এদিকে আমি অনুসন্ধান শব্দ আপ দেখছি মডেল , দয়া করে তাকে / তার একটি অগ্রগতি বার প্রদর্শন [ সবচেয়ে মূল্যবান খেলোয়াড় | এমভিসি ]

( উপস্থাপক | নিয়ন্ত্রণকারী মডেলকে কল করছে …) [ এমভিপি | এমভিসি ]

ViewController : ধন্যবাদ, আমি অনুসন্ধান শব্দ আপ খুঁজছেন করা হবে মডেল কিন্তু আপনি সরাসরি আপডেট করবে না। পরিবর্তে, যদি কোনও ফলাফল থাকে তবে আমি অনুসন্ধানের ফলাফলগুলিতে তালিকাভোজযোগ্য ইভেন্টগুলিতে ট্রিগার করব। সুতরাং আপনি যে ভাল পর্যবেক্ষণ ছিল। [ এমভিভিএম ]

(অনুসন্ধানের ফলাফলসমূহের তালিকাগুলি পর্যবেক্ষণযোগ্য যে কোনও ট্রিগার পর্যবেক্ষণ করার সময়, ভিউ মনে করে যে এটি ব্যবহারকারীর কাছে কিছু অগ্রগতি বার প্রদর্শন করা উচিত, যেহেতু ভিউমোডেল এ বিষয়ে তার সাথে কথা বলবে না)

------------------------------

ভিউমোডেল | উপস্থাপক | নিয়ামক : আরে মডেল , এই অনুসন্ধান শব্দটির সাথে আপনার কোনও মিল আছে ?: "পিয়ানো" [ এমভিভিএম | এমভিপি | এমভিসি ]

মডেল : আরে ভিউমোডেল | উপস্থাপক | কন্ট্রোলার , আমাকে পরীক্ষা করতে দিন… [ এমভিভিএম | এমভিপি | এমভিসি ]

( মডেল মুভি ডেটাবেজে একটি জিজ্ঞাসা করছে…) [ এমভিভিএম | এমভিপি | এমভিসি ]

( কিছুক্ষণ পর … )

---- এই মধ্যে উত্পথ বিন্দু MVVM , সবচেয়ে মূল্যবান খেলোয়াড় এবং MVC -----

মডেল : আমি আপনার জন্য একটি তালিকা পেয়েছি, ভিউমোডেল | উপস্থাপক , এখানে এটি জেএসওনে রয়েছে [[name "নাম": "পিয়ানো শিক্ষক", "বছর": 2001}, {"নাম": "পিয়ানো", "বছর": 1993}] "[ এমভিভিএম | এমভিপি ]

মডেল : কিছু ফলাফল উপলব্ধ, কন্ট্রোলার। আমি আমার উদাহরণে একটি ফিল্ড ভেরিয়েবল তৈরি করেছি এবং ফলাফল দিয়ে এটি পূরণ করেছি। এটির নাম "অনুসন্ধানের ফলাফলগুলি তালিকা" [ এমভিসি ]

( উপস্থাপক | নিয়ন্ত্রণকারী মডেলকে ধন্যবাদ জানায় এবং ভিউতে ফিরে আসে ) [ এমভিপি | এমভিসি ]

উপস্থাপক : অপেক্ষার দৃশ্যের জন্য ধন্যবাদ , আমি আপনার জন্য মিলে যাওয়া ফলাফলের একটি তালিকা পেয়েছি এবং সেগুলি উপস্থাপনযোগ্য বিন্যাসে সাজিয়েছি: [“পিয়ানো শিক্ষক 2001 ″,” পিয়ানো 1993]]। এছাড়াও দয়া করে এখন অগ্রগতি বারটি লুকান [ এমভিপি ]

কন্ট্রোলার : অপেক্ষার ভিউয়ের জন্য ধন্যবাদ , আমি আপনার অনুসন্ধানের অনুসন্ধানের বিষয়ে মডেলকে জিজ্ঞাসা করেছি। এটি বলেছে যে এটি মিলে যাওয়া ফলাফলের একটি তালিকা পেয়েছে এবং সেগুলিকে এর উদাহরণের মধ্যে "অনুসন্ধানের ফলাফলগুলি তালিকাভুক্ত" নামক একটি ভেরিয়েবলে সংরক্ষণ করেছে। আপনি সেখান থেকে এটি পেতে পারেন। এছাড়াও দয়া করে এখন অগ্রগতি বারটি লুকান [ এমভিসি ]

ভিউমোডেল : অনুসন্ধানের ফলাফলসমূহের তালিকা পর্যবেক্ষণযোগ্য যে কোনও পর্যবেক্ষককে অবহিত করা যেতে পারে যে উপস্থাপনযোগ্য ফর্ম্যাটে এই নতুন তালিকা রয়েছে: ["পিয়ানো শিক্ষক 2001 ″," পিয়ানো 1993 "]। [ এমভিভিএম ]

দেখুন : আপনাকে অনেক উপস্থাপক [ এমভিপি ] ধন্যবাদ

দেখুন : আপনাকে ধন্যবাদ " নিয়ন্ত্রণকারী " [ এমভিসি ] (এখন দেখুন নিজেই প্রশ্ন তুলছে: মডেল থেকে প্রাপ্ত ফলাফলগুলি আমি ব্যবহারকারীর সামনে কীভাবে উপস্থাপন করব ? সিনেমার প্রযোজনার বছরটি প্রথম বা শেষ হওয়া উচিত ...?)

দেখুন : ওহ, অনুসন্ধানের নতুন ট্রিগার রয়েছে ফলাফলগুলি তালিকাভুক্তযোগ্য ..., ভাল, একটি উপস্থাপনযোগ্য তালিকা আছে, এখন আমাকে কেবল একটি তালিকায় এটি প্রদর্শন করতে হবে। আমারও এখন ফলস্বরূপ অগ্রগতি বারটি আড়াল করা উচিত। [ এমভিভিএম ]

আপনার আগ্রহের ক্ষেত্রে, আমি এখানে মুভি অনুসন্ধান অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রয়োগ করে এমভিভিএম, এমভিপি এবং এমভিসির তুলনা করে এখানে নিবন্ধগুলির একটি সিরিজ লিখেছি ।


এখানে সমস্ত স্বাদযুক্ত পাঠ্যের নিচে দুর্দান্ত উত্তর রয়েছে ... কিছু ফর্ম্যাট করে এবং উপাদানগুলির মধ্যে ছোট আলাপ ছড়িয়ে দিয়ে এই পৃষ্ঠায় এটি সেরা হতে পারে।
নিয়নব্লিটজার

10

এমভিসি ব্যবহার করে দৃশ্যে টাইপযুক্ত ভিউমোডেলগুলি ইনজেক্ট করা হচ্ছে

  1. কন্ট্রোলারটি ভিউমোডেলটি নতুন করে এনে ভিউতে ইনজেক্ট করার জন্য দায়ী। (অনুরোধ পেতে)
  2. ভিউমোডেল হ'ল ডেটা কনটেক্সট এবং ভিউ স্টেটের জন্য সর্বশেষ নির্বাচিত আইটেম ইত্যাদির ধারক is
  3. মডেলটিতে ডিবি সত্তা রয়েছে এবং এটি ডিবি স্কিমার খুব কাছাকাছি এটি কোয়েরিজ এবং ফিল্টারিং করে। (আমি এটির জন্য ইএফ এবং লিনকিউ পছন্দ করি)
  4. মডেলটিকে স্টোরগুলি এবং শক্ত প্রকারভেদে ফলাফলের প্রক্ষেপণও বিবেচনা করা উচিত (EF এর একটি দুর্দান্ত পদ্ধতি রয়েছে ... EF.Datedia.Select (ক্যোয়ার্স স্ট্রিং, পারমস) ইনজেক্টের অনুসন্ধানগুলিতে সরাসরি ADO অ্যাক্সেসের জন্য নির্বাচন করুন এবং শক্তিশালী ধরণের ফিরে পাবেন This এটি EF কে সম্বোধন করে আস্তে আর্গুমেন্ট। EF কম নয় !
  5. ভিউমোডেল ডেটা পায় এবং ব্যবসায়ের নিয়ম এবং যাচাই করে
  6. পোস্ট পিছনে থাকা কন্ট্রোলার ভিউমোডেল পোস্ট পদ্ধতিটি কল করবে এবং ফলাফলের জন্য অপেক্ষা করবে।
  7. নিয়ামকটি নতুন আপডেট হওয়া ভিউ মডেলটিকে ভিউতে ইনজেক্ট করবে। ভিউতে কেবল শক্তিশালী ধরণের বাইন্ডিং ব্যবহার করা হয়
  8. দৃশ্যটি কেবল ডেটা উপস্থাপন করে এবং ইভেন্টগুলিকে নিয়ন্ত্রকের কাছে পোস্ট করে। (নীচে উদাহরণ দেখুন)
  9. এমভিসি অভ্যন্তরীণ অনুরোধটিকে বাধা দেয় এবং দৃ strong় ডেটা টাইপ সহ এটি সঠিক নিয়ামকের দিকে রট করে

এমএসএফটি-র এমভিসি মেশিনটি আমাদের থেকে এটি লুকিয়ে রাখায় এই মডেলটিতে অনুরোধ বা প্রতিক্রিয়াযুক্ত সামগ্রীর সাথে এইচটিটিপি স্তরের কোনও যোগাযোগ নেই

উপরের আইটেমের স্পষ্টকরণে (অনুরোধ করে) ...

এটির মতো একটি ভিউমোডেল ধরে নিন:

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);
}

নোট করুন যে উপরের এই ক্রিয়াকলাপটি আপনার উদ্দেশ্য হিসাবে কাজ করার জন্য, আপনার অবশ্যই একটি নাল সিটিওআর সংজ্ঞায়িত করতে হবে যা পোস্টে ফিরে আসে না এমন জিনিসগুলিকে অন্তর্নিহিত করে। সেই পোস্টের পিছনে অবশ্যই সেই জিনিসগুলির জন্য পিছনে নাম / মান জোড়া পোস্ট করতে হবে। যদি হারিয়ে যাওয়া নাম / মান জোড়া থাকে তবে এমভিসি বাইন্ডিং ইঞ্জিন যথাযথ কাজ করে যা কেবল কিছুই নয়! যদি এটি হয় তবে আপনি নিজেকে "পোস্ট ব্যাকগুলিতে ডেটা হারাচ্ছি" বলে মনে করতে পারেন ...

এই প্যাটার্নটির সুবিধা হ'ল ভিউমোডেল সমস্ত "গোলমাল" কাজটি মডেল / বুইজেনিক যুক্তির সাথে ইন্টারফেস করে, নিয়ামকটি কেবলমাত্র এক ধরণের রাউটার। এটি কার্যত এসওসি।


আপনি আইটেম 6 স্পষ্ট করতে পারেন? আমি বুঝতে পেরেছি আপনি কেবল এএসপি.নেটকে কভার করছেন তবে এটি ভিউমোডেলে কোনও অযাচিত নির্ভরতা যুক্ত করছে বলে মনে হচ্ছে। (যেমন কোথা থেকে ডেটা আসে / যায় সে সম্পর্কে জ্ঞান)। একটি কোড (সিউডো-কোড?) উদাহরণটি এই উত্তরটি পরিষ্কার করা এবং কোন অংশটি সার্ভার-সাইড এবং কোনটি ক্লায়েন্ট-সাইড রয়েছে তা দেখানো ভাল।
কোডিং হয়ে

9

এমভিভিএম মিশ্রণে ভিউ মডেল যুক্ত করে। এটি গুরুত্বপূর্ণ, কারণ এটি আপনাকে আপনার নিয়মিত মডেলের সমস্ত নির্দিষ্ট ইউআই নির্দিষ্ট টুকরো না রেখে ডাব্লুপিএফ-র অনেকগুলি বাধ্যবাধকতা ব্যবহার করতে দেয়।

আমি ভুল হতে পারি, তবে আমি নিশ্চিত নই যে এমভিভিএম সত্যিই নিয়ন্ত্রণকারীকে মিশ্রণে চাপিয়ে দেয়। আমি ধারণাটি এর সাথে আরও সামঞ্জস্যপূর্ণ বলে মনে করি : http://martinfowler.com/eaaDev/PenterationModel.html । আমি মনে করি যে লোকেরা এটি এমভিসির সাথে একত্রিত করতে বেছে নেয়, এটি নয় যে এটি নকশায় তৈরি করা হয়েছে।


3
এমভিভিএম, কঠোরভাবে বলতে গেলে, উপস্থাপনা মডেল, যদিও এমভিভিএম প্যাটার্নটির ডাব্লুপিএফ নির্দিষ্ট উপলব্ধির জন্য পছন্দের নাম হয়ে উঠছে।
উইকেম্পফ 21

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

9

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


1
এই প্রোগ্রামটিতে আমি তর্ক করবে যে, "কন্ট্রোলার আরো পুনর্ব্যবহারযোগ্য উপার্জন" খুবই বিস্তৃত সাধারণ ASP.Net "কন্ট্রোলার" জন্য একটি বিবৃতি আর পাল্টা উত্পাদনশীল (অর্থাত না ব্যবসা লজিক স্তর) হিসাবে যারা কন্ট্রোলার সাধারণত আবেদনের যে অংশ থাকতে application- নির্দিষ্ট । এটি এমন দর্শন, মডেল, ভিউমোডেল এবং ব্যবসায়িক যুক্তি যা পুনরায় ব্যবহারযোগ্য হওয়া দরকার। আমি ভাবতাম ব্যবসায়ের লজিক মডিউলগুলি পরিষেবা সরবরাহকারী হিসাবে বিবেচনা করা, নিয়ামক হিসাবে নয়, এটি আরও ভাল বিকল্প হবে।
কোডিংিং

তবে আপনি এমপিভিএম ডিজাইনের প্যাটার্নটি সম্পর্কে নয়, এএসপনেটে "ভিউমোডেল" সম্পর্কে কথা বলছেন। দুটি ভিন্ন জিনিস।
লুইস

9

এটি আমাকে অবাক করে দেয় যে এটি এমভিভিএমের উত্সের উল্লেখ না করেই একটি উচ্চ ভোটযুক্ত উত্তর । এমভিভিএম হ'ল মাইক্রোসফ্ট সম্প্রদায়ে ব্যবহৃত একটি জনপ্রিয় শব্দ এবং এটি মার্টিন ফওলারের উপস্থাপনা মডেল থেকে উদ্ভূত । সুতরাং প্যাটার্নের উদ্দেশ্য এবং অন্যদের সাথে পার্থক্য বুঝতে, প্যাটার্নটি সম্পর্কে মূল নিবন্ধটি পড়ার প্রথম জিনিস।


বাহ ... সুতরাং এমভিসি এবং এমভিভিএম দুজনই ছোট্ট টাল্ক থেকে এসেছে ?? তারা আপাতদৃষ্টিতে তাদের সময়ের চেয়ে এগিয়ে ছিল ...
ম্যাটেট

আসলে, এটি মার্টিন ফোলারের উপস্থাপনা মডেল থেকে উত্পন্ন বলে বলা সঠিক নয়। প্রথমটি কোনটি এসেছিল তা নির্ধারণ করা খুব কঠিন, তবে উভয় নিদর্শন (তারা সত্যই একই ধাঁচের মঞ্জুরি দেয়) স্বতন্ত্র এবং মোটামুটি একই সময়ে এসেছিল।
wekempf

6

ওয়েল, সাধারণত এমভিসি ওয়েব ডেভলপমেন্টে ব্যবহৃত হয় এবং ডাব্লুপিএফ / সিলভারলাইট বিকাশে এমভিভিএম সর্বাধিক জনপ্রিয়। তবে, কখনও কখনও ওয়েব আর্কিটেকুটে এমভিসি এবং এমভিভিএমের মিশ্রণ থাকতে পারে।

উদাহরণস্বরূপ: যদি আপনি ব্যবহার করতে পারেন knockout.js এবং এই ক্ষেত্রে আপনি আপনার ক্লায়েন্ট পাশ MVVM থাকবে। এবং আপনার এমভিসির সার্ভারের দিকটিও পরিবর্তন করতে পারে। জটিল অ্যাপ্লিকেশনগুলিতে, কেউ খাঁটি মডেল ব্যবহার করে না। এমভিসির একটি "মডেল" হিসাবে ভিউমোডেলটি ব্যবহার করার অনুভূতি থাকতে পারে এবং আপনার আসল মডেলটি মূলত এই ভিএম এর একটি অংশ হবে। এটি আপনাকে একটি অতিরিক্ত বিমূর্ত স্তর দেয়।


'ওয়েব ডেভলপমেন্ট' পদ 'এমভিসি' কী বলে তা উদ্বেগের বিভাজন ছাড়া আর কিছুই নয় এবং ওয়েবের আগে খাঁটি এমভিসি নয় not
টেরেন্স ব্রান্নন

4

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

আপনার নকশাগুলি সম্পর্কে নিশ্চিত নন, তবে আমার বেশিরভাগ অ্যাপ্লিকেশনগুলিতে পৃষ্ঠা এবং বেশ কয়েকটি (পুনরায় ব্যবহারযোগ্য) ভিউ রয়েছে এবং এইভাবে ভিউমোডেলগুলি কিছুটা ডিগ্রির সাথে ইন্টারেক্ট করার দরকার পড়ে। পৃষ্ঠাটিকে নিয়ামক হিসাবে ব্যবহার করা পুরোপুরি এমভিভিএমের উদ্দেশ্যকে পরাভূত করতে পারে, সুতরাং অন্তর্নিহিত যুক্তির জন্য "ভিএম-সি" পদ্ধতির ব্যবহার না করার ফলে অ্যাপ্লিকেশন পরিপক্ক হওয়ার সাথে সাথেই ভাল হতে পারে ... চ্যালেঞ্জিং কনস্ট্রাক্টগুলি। এমনকি ভিবি-6 এ আমাদের বেশিরভাগই সম্ভবত ব্যবসায়িক যুক্তি কোডিং বোতাম ইভেন্টে বন্ধ করে দিয়েছিলেন এবং একটি নিয়ামকের কাছে 'রিলে' আদেশগুলি শুরু করেছিলেন, তাই না? আমি সম্প্রতি সেই বিষয়টিতে অনেক উদীয়মান ফ্রেমওয়ার্কের দিকে নজর দিয়েছি; আমার প্রিয় স্পষ্টভাবে ম্যাগেলান (কোডেপ্লেক্সে) পদ্ধতির। শুভ কোডিং!

http://en.wikipedia.org/wiki/Model_View_ViewModel#References


4

নিয়ন্ত্রণকারীকে এমভিভিএম-এ ভিউমোডেল দ্বারা প্রতিস্থাপন করা হয় না, কারণ ভিউমোডেলের একটি সম্পূর্ণ আলাদা কার্যকারিতা থাকে তারপরে একটি নিয়ামক। আপনার এখনও একটি নিয়ামক প্রয়োজন, কারণ একটি নিয়ামক ছাড়া আপনার মডেল, ভিউমোডেল এবং ভিউ খুব বেশি কিছু করবে না ... এমভিভিএম-এ আপনার একটি কন্ট্রোলারও রয়েছে, এমভিভিএম নামটি কেবল মিসেলিডিং।

আমার বিনীত মতে এমভিভিএমসি সঠিক নাম।

আপনি দেখতে পাচ্ছেন ভিউমোডেল এমভিসি প্যাটার্নের কেবল একটি সংযোজন। এটি রূপান্তর-যুক্তিকে (উদাহরণস্বরূপ বস্তুকে একটি স্ট্রিংয়ে রূপান্তর করে) কন্ট্রোলার থেকে ভিউমোডেলে স্থানান্তরিত করে।


4

আমি এটির জন্য একটি মিডিয়াম নিবন্ধ তৈরি করেছি।

MVVM

  1. দেখুন ➡ ভিউমোডেল ➡ মডেল

    • ভিউতে ভিউমোডেলের রেফারেন্স রয়েছে তবে বিপরীতে নয়।
    • ভিউমোডেলটিতে মডেলের রেফারেন্স রয়েছে তবে বিপরীতে নয়।
    • ভিউটির কোনও মডেল এবং বিপরীতে কোনও রেফারেন্স নেই।
  2. আপনি যদি কোনও নিয়ামক ব্যবহার করে থাকেন তবে এতে ভিউ এবং ভিউমোডেলগুলির একটি উল্লেখ থাকতে পারে , যদিও কোনও সুইচইউআইআই-তে প্রদর্শিত হিসাবে কোনও নিয়ামক সর্বদা প্রয়োজন হয় না ।

  3. ডেটা বাইন্ডিং : আমরা ভিউমোডেল প্রোপার্টিগুলির জন্য শ্রোতা তৈরি করি।
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
   }
}

সেটআপে পার্থক্য

  1. ব্যবসায়িক যুক্তি MVC এর জন্য নিয়ামক এবং এমভিভিএমের জন্য ভিউমোডেলগুলিতে থাকে।
  2. ইভেন্টগুলি ভিভি থেকে সরাসরি এমভিসি-তে নিয়ন্ত্রকের কাছে প্রেরণ করা হয় যখন ইভেন্টগুলি ভিউ থেকে মোডেল থেকে নিয়ন্ত্রণকারীকে (যদি সেখানে থাকে) এমভিভিএমের জন্য প্রেরণ করা হয়।

সাধারণ বৈশিষ্ট্য

  1. এমভিভিএম এবং এমভিসি উভয়ই ভিউটিকে সরাসরি মডেল / গুলিগুলিতে বার্তা প্রেরণের অনুমতি দেয় না।
  2. দুজনেরই মডেল রয়েছে।
  3. উভয়েরই মতামত রয়েছে।

এমভিভিএমের সুবিধা

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

এমভিসির সুবিধা

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

1
সেরা ব্যাখ্যা
p32094

2

ব্যবহারিক দৃষ্টিকোণ থেকে, এমভিসি (মডেল-ভিউ-কন্ট্রোলার) একটি নিদর্শন। তবে এমভিসি যখন এএসপিএনটি এমভিসি হিসাবে ব্যবহৃত হয়, যখন সত্তা ফ্রেমওয়ার্ক (ইএফ) এর সাথে মিলিত হয় এবং "পাওয়ার সরঞ্জামগুলি" একটি ওয়েব-পৃষ্ঠায় ডাটাবেস, টেবিল এবং কলামগুলি আনার জন্য একটি খুব শক্তিশালী, আংশিকভাবে স্বয়ংক্রিয় পদ্ধতি যা কোনও সম্পূর্ণর জন্য CRUD অপারেশন বা আর (পুনরুদ্ধার করুন বা পড়ুন) কেবলমাত্র ক্রিয়াকলাপ। কমপক্ষে আমি এমভিভিএম ব্যবহার করার সাথে সাথে ভিউ মডেলগুলি এমন মডেলগুলির সাথে আলাপচারিত হয়েছিলেন যা ব্যবসায়ের বিষয়গুলির উপর নির্ভর করে, যা "হাতে তৈরি" হয়ে যায় এবং প্রচুর প্রচেষ্টার পরেও, একজন ভাগ্যবান যে মডেলগুলি ইএফ একটি দেয় "হিসাবে ভাল হিসাবে দেয়" -of-the-box "। ব্যবহারিক প্রোগ্রামিং দৃষ্টিকোণ থেকে, এমভিসি একটি ভাল পছন্দ বলে মনে হচ্ছে কারণ এটি বাইরের বাইরে প্রচুর ইউটিলিটি দেয়, তবে এখনও বেলস এবং হুইসেল যুক্ত হওয়ার সম্ভাবনা রয়েছে।


2

দেওয়া অনেক প্রতিক্রিয়ার পরিপূরক, আমি আধুনিক ক্লায়েন্ট-সাইড ওয়েব - বা রিচ ওয়েব অ্যাপ্লিকেশন থেকে কিছু অতিরিক্ত দৃষ্টিভঙ্গি যুক্ত করতে চেয়েছিলাম

প্রকৃতপক্ষে আজকাল সহজ ওয়েব সাইট এবং বৃহত্তর ওয়েব অ্যাপ্লিকেশনগুলি সাধারণত বুটস্ট্র্যাপের মতো অনেক জনপ্রিয় লাইব্রেরি দিয়ে তৈরি করা হয়। স্টিভ স্যান্ডারসন দ্বারা নির্মিত, নকআউট এমভিভিএম প্যাটার্নের জন্য সমর্থন সরবরাহ করে যা প্যাটার্নের অন্যতম গুরুত্বপূর্ণ আচরণের নকল করে: ভিউ মডেলের মাধ্যমে ডেটা-বাইন্ডিং। সামান্য জাভাস্ক্রিপ্টের সাহায্যে ডেটা এবং যুক্তি প্রয়োগ করা যেতে পারে যা বুটস্ট্র্যাপেরdata-bind অনেকগুলি বৈশিষ্ট্য ব্যবহারের অনুরূপ সাধারণ HTML বৈশিষ্ট্যযুক্ত পৃষ্ঠা উপাদানগুলিতে যুক্ত করা যেতে পারে । একসাথে এই দুটি গ্রন্থাগার একাই ইন্টারেক্টিভ সামগ্রী সরবরাহ করে; এবং যখন রাউটিংয়ের সাথে একত্রিত হয়ে এই পদ্ধতির ফলস্বরূপ একক পৃষ্ঠা অ্যাপ্লিকেশন তৈরির জন্য একটি সহজ-তবে-শক্তিশালী পদ্ধতির ফলস্বরূপ ।

একইভাবে, অ্যাঙ্গুলারের মতো একটি আধুনিক ক্লায়েন্ট-সাইড কাঠামোটি কনভেনশন দ্বারা এমভিসি প্যাটার্ন অনুসরণ করে, তবে একটি পরিষেবা যুক্ত করে। মজার বিষয় হল, এটি মডেল-ভিউ-যা-ই হোক (এমভিডাব্লু) হিসাবে যুক্ত। ( স্ট্যাক ওভারফ্লোতে এই পোস্টটি দেখুন ।)

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


2

আমি ভাবতাম এমভিসি এবং এমভিভিএম একই রকম। এখন ফ্লাক্সের অস্তিত্বের কারণে আমি পার্থক্যটি বলতে পারি:

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

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

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


2

এমভিসি হ'ল সার্ভার-সাইড এবং এমভিভিএম হ'ল ওয়েব বিকাশে ক্লায়েন্ট-সাইড (ব্রাউজার)।

জাভাস্ক্রিপ্ট বেশিরভাগ সময় ব্রাউজারে এমভিভিএম এর জন্য ব্যবহৃত হয়। এমভিসি এর জন্য অনেকগুলি সার্ভার সাইড প্রযুক্তি রয়েছে।


1

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


1

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

Desktopতিহ্যগতভাবে ডেস্কটপ গ্রাফিকাল ইউজার ইন্টারফেস (জিইউআই) এর জন্য ব্যবহৃত, এই প্যাটার্নটি ওয়েব অ্যাপ্লিকেশনগুলি ডিজাইনের জন্য জনপ্রিয় হয়ে উঠেছে। জাভা স্ক্রিপ্ট, পাইথন, রুবি, পিএইচপি, জাভা এবং সি # এর মতো জনপ্রিয় প্রোগ্রামিং ভাষার এমভিসি ফ্রেমওয়ার্ক রয়েছে যা ওয়েব অ্যাপ্লিকেশন বিকাশে সরাসরি বাক্সের বাইরে ব্যবহার করা হয়।

মডেল

প্যাটার্নের কেন্দ্রীয় উপাদান। এটি ব্যবহারকারীর ইন্টারফেসের চেয়ে আলাদা অ্যাপ্লিকেশনটির গতিশীল ডেটা কাঠামো। এটি সরাসরি ডেটা, যুক্তি এবং অ্যাপ্লিকেশনটির নিয়ম পরিচালনা করে।

দৃশ্য

চার্ট, চিত্র বা টেবিলের মতো তথ্যের কোনও উপস্থাপনা। একই তথ্যের একাধিক মতামত সম্ভব, যেমন পরিচালনার জন্য বার চার্ট এবং হিসাবরক্ষকদের জন্য একটি সারণী দর্শন।

নিয়ামক

ইনপুট গ্রহণ করে এবং মডেল বা দেখার জন্য আদেশগুলিতে রূপান্তর করে।

এই উপাদানগুলিতে অ্যাপ্লিকেশন ভাগ করার পাশাপাশি, মডেল – ভিউ – কন্ট্রোলার ডিজাইন তাদের মধ্যে মিথস্ক্রিয়া সংজ্ঞায়িত করে।

মডেলটি অ্যাপ্লিকেশনটির ডেটা পরিচালনা করার জন্য দায়বদ্ধ। এটি নিয়ামকের কাছ থেকে ব্যবহারকারী ইনপুট গ্রহণ করে।

ভিউ মানে কোনও নির্দিষ্ট বিন্যাসে মডেলটির উপস্থাপনা।

নিয়ামকটি ব্যবহারকারী ইনপুটটিতে সাড়া দেয় এবং ডেটা মডেল অবজেক্টগুলিতে ইন্টারঅ্যাকশন করে। কন্ট্রোলার ইনপুট গ্রহণ করে, allyচ্ছিকভাবে এটি বৈধ করে এবং তারপরে মডেলটির কাছে ইনপুটটি পাস করে। এখানে চিত্র বর্ণনা লিখুন

মডেল – ভিউ – ভিউমোডেল (এমভিভিএম) একটি সফ্টওয়্যার স্থাপত্য নিদর্শন pattern

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

এমভিভিএম হ'ল মার্টিন ফোলারের উপস্থাপনা মডেল ডিজাইনের ধরণটির একটি প্রকরণ। এমভিভিএম একইভাবে একটি দৃশ্যের অবস্থা এবং আচরণকে বিমূর্ত করে তোলে, তবে একটি উপস্থাপনা মডেল নির্দিষ্ট ইউজার-ইন্টারফেস প্ল্যাটফর্মের উপর নির্ভরশীল নয় এমনভাবে একটি দৃষ্টিভঙ্গি (একটি ভিউ মডেল তৈরি করে) এড়িয়ে যায়।

মাইক্রোসফ্ট আর্কিটেক্ট কেন কুপার এবং টেড পিটারস বিশেষত ইউজার ইন্টারফেসের ইভেন্ট-চালিত প্রোগ্রামিংকে সহজ করার জন্য এমভিভিএম আবিষ্কার করেছিলেন। প্যাটার্নটি উইন্ডোজ উপস্থাপনা ফাউন্ডেশন (ডাব্লুপিএফ) (মাইক্রোসফ্ট।। নেট গ্রাফিক্স সিস্টেম) এবং সিলভারলাইট (ডাব্লুপিএফ এর ইন্টারনেট অ্যাপ্লিকেশন ডেরাইভেটিভ) মধ্যে অন্তর্ভুক্ত করা হয়েছিল। মাইক্রোসফ্টের ডাব্লুপিএফ এবং সিলভারলাইট আর্কিটেক্টদের একজন জন গসম্যান 2005 সালে তার ব্লগে এমভিভিএম ঘোষণা করেছিলেন।

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

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