এমভিভিএম-এ, ভিউমোডেল বা ভিউ নতুন দৃষ্টিভঙ্গি তৈরির জন্য দায়বদ্ধ হওয়া উচিত?


11

আমার ডাব্লুপিএফ অ্যাপ্লিকেশনটিতে, আমি একটি নতুন ভিউ তৈরি করতে চাই। ভিউমোডেল বা মডেল- এ আমি কোথায় করব ?

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

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

অন্যদিকে, ভিউমোডেলে একটি নতুন দৃষ্টিভঙ্গি তৈরি করা এই নীতিটিকে লঙ্ঘন করে যে ভিউমোডেল ভিউ সম্পর্কে কিছুই জানতে না পারে।

সুতরাং, ভিউ বা ভিউমডেলে নতুন ভিউ তৈরি করা ভাল?


1
আমি সত্যিই আপনার প্রশ্ন বুঝতে পারি না। "ইন ভিউ বা ভিউমোডেল" এর অর্থ কী? ভিউমোডেলগুলি দর্শন তৈরি করে না এবং দৃশ্যগুলি অবশ্যই নিজের তৈরি করে না।
রবার্ট হার্ভে

1
আমি বোঝাতে চাইছি এই স্তরগুলির মধ্যে কোনটি নতুন দর্শন তৈরির জন্য দায়বদ্ধ হওয়া উচিত - এটি করার সিগন্যালটি যখন ক্রিয়া ঘটে তখন কোথাও থেকে আসতে হবে। আমি এই প্রশ্নটি থেকে মডেলকে পুরোপুরি বাদ দিয়েছি, কারণ এটি সম্মুখভাগ সম্পর্কে কিছুই জেনে রাখা উচিত নয়।
Mac70

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

উত্তর:


8

আমি IViewFactoryউভয় প্রতিবন্ধকতা সম্মানের জন্য ভিউ মডেলে নির্ভরতা ইনজেকশন এবং একটি ইনজেকশন ব্যবহার করি ।

একটি ProductViewModel(উদাহরণস্বরূপ) কল হিসাবে নিজের সাথে this.viewFactory.Show("Details", this)খোলার । এটি অন্য ভিউ মডেলের সাথে ভিত্তি করে একটি দৃশ্যও খুলতে পারে ।ProductDetailsViewProductViewModelthis.viewFactory.Show<ClientViewModel>()

বাস্তবায়ন (উইনফোর্ডের জন্য আসলে বেশ কয়েকটি রয়েছে, সরল ডাব্লুপিএফ উইন্ডোজ, ট্যাব সহ একটি ডাব্লুপিএফ শেল, ...) একটি StructureMapসম্মেলনের উপর ভিত্তি করে । ভিউগুলি একটি IView<ProductViewModel>ইন্টারফেসের মাধ্যমে তাদের দর্শন মডেলকে মনোনীত করে ।

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


7

তাত্ত্বিক উত্তর

আপনি যদি একটি থেকে থাকে ViewModel, কর্ম অঙ্গরাগ প্রভাব আছে (যেমন মাউসওভার উপর একটি আইটেমটি হাইলাইট) কাজ হয় View, যখন ক্রিয়া আছে "বাস্তব" প্রভাব (যেমন ডিম ছাড়ার একটি নতুন উইন্ডো) কাজ হয় ViewModel

যেমন একটি নতুন উইন্ডো তৈরি করা একটি কাজ ViewModel। তবে ViewModelউইন্ডোটি কীভাবে তৈরি করা যায় তা দৃশ্য বা না উভয়েরই জানা উচিত নয়, এটি তাদের দায়িত্বের অংশ নয় এবং এটি একটি পৃথক শ্রেণীর অন্তর্গত।

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

কোনও অবস্থাতেই উইন্ডোটি তৈরি করা তার অন্তর্গত নয় Model, কারণ এটি Modelএমনকি সচেতন নয় যে জিইউআইয়ের মতো কিছু রয়েছে।

ব্যবহারিক উত্তর

এটি একক "প্রেরণ" বোতামের সাথে "ওয়ান উইন্ডো ফর্মের মতো সরঞ্জাম" সম্পর্কে । আমার সম্পর্কিত সম্পর্কিত একটি নির্লজ্জ প্লাগ এখানে: এমভিভিএম কেন ব্যবহার করবেন?

এই উত্তরটি যা বলে তা সংক্ষেপে: এটিকে সহজ রাখুন। ওহ, এবং একবার আপনার একক বোতাম উইন্ডো আরও জটিল হয়ে উঠতে শুরু করার পরে তাত্ত্বিক উত্তরটি মাথায় রাখুন।

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