আমাদের কোনও মডেলের সম্পত্তিতে ভিউ বাঁধানো উচিত বা ভিউমোডেলের নিজস্ব হওয়া উচিত ..?


21

আমি নিম্নলিখিত প্রযুক্তিগত পরিবেশের সাথে একটি প্রকল্প শুরু করছি: নেট 4.0, সত্ত্বা ফ্রেমওয়ার্ক 4.0, এমভিভিএম আর্কিটেকচার সহ ডাব্লুপিএফ

নেটে প্রচুর উদাহরণ দেখেছি, এই পরিবেশ সহ কয়েকটি বই। কয়েকটি উদাহরণে লেখকের এই আইডিয়া ছিল:

  1. ভিওমডেলের মডেল শ্রেণির উদাহরণ থাকবে (সত্তা ফ্রেমওয়ার্ক সত্তা উদাহরণস্বরূপ ব্যক্তি)
  2. মডেলটির বৈশিষ্ট্যগুলিতে ডাব্লুপিএফ ভিউ নিয়ন্ত্রণগুলিকে আবদ্ধ করুন

কিছু লেখক যখন করেছেন:

  1. ভিওমডেল মডেলের সমস্ত সম্পত্তি প্রকাশ করবে।
  2. ডাব্লুপিএফ দেখুন নিয়ন্ত্রণগুলি সরাসরি মডেলের পরিবর্তে ভিউমোডেলের বৈশিষ্ট্যগুলিতে বেঁধে রাখুন।

সুতরাং ভিউ মডেলটির নিজস্ব প্রকাশের চেয়ে ভিউ মডেল থেকে বৈশিষ্ট্যগুলিকে বাঁধাই করা কি ভাল ধারণা? বা কোনটি বেশি পছন্দ?


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

উত্তর:


25

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

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

অতিরিক্তভাবে, বেশিরভাগ মডেল বাস্তবায়ন করে না INotifyPropertyChangedতাই প্রাথমিক ডিসপ্লে পরে পর্দার অবস্থা পরিবর্তিত হলে তারা উপযুক্ত বাঁধাই লক্ষ্যগুলি নাও পেতে পারে।

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


আমি আপনার উত্তর পছন্দ। সম্পাদনা / সংরক্ষণ স্ক্রিন উল্লেখের জন্য +1 .. তবে তারপরে বৈশিষ্ট্যগুলি একবারে লিখতে অসুবিধা হবে - একবার মডেল এবং আবার ভিউ-মডেলে। এটি উন্নয়নের সময়ও বাড়িয়ে তুলত। আপনি কি মনে করেন যে এটি করা ন্যায়সঙ্গত ...?
প্রবীণ পাতিল

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

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

16

এর বিন্দুটি ViewModelহ'ল এটি একটি মডেল View

আপনাকে কোনও সংস্থান (সরাসরি নয়, যাইহোক) নয় , এর ViewModelকাছে বাধ্যতামূলক হওয়া উচিত ।ViewModel


8

আমি উভয় পদ্ধতি গ্রহণযোগ্য বলে মনে করি

শুধুমাত্র ভিউমোডেলের সাথে বাঁধাই হ'ল "এমভিভিএম-পিউরিস্ট" পদ্ধতির এবং স্তরগুলির মধ্যে আরও ভাল বিভাজনের দিকে পরিচালিত করে। মডেলের সাথে বাইন্ডিং সাধারণত দ্রুত এবং আরও সুবিধাজনক।

স্তরগুলি (প্রকল্পের আকার, ভবিষ্যতের রক্ষণাবেক্ষণের উদ্বেগ, আমি যে মডেলটির সাথে কাজ করছি ইত্যাদি) সম্পূর্ণ আলাদা করার উপযুক্ত কারণ না থাকলে আমি মডেলের সাথে আবদ্ধ থাকি।


7

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

সিউডো কোড:

 {Binding: MyViewModel.MyModel.Name}

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

আপনি যদি কেবল ভিউ-মডেল হিসাবে আবদ্ধ হন তবে আপনি মডেলটি পরিবর্তন করতে পারেন এবং ভিউটি কখনই জানতে পারবেন না কারণ এটি কেবলমাত্র ভিউ-মডেলের নাম নামের সম্পত্তিটিই দেখতে পাবে।

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

সিউডো কোড:

 {Binding: MyViewModel.MyModel.ModuleName}

যতক্ষণ আপনি যেকোন মডেলকে আইবেসডেটেল ইন্টারফেসটি সন্তুষ্ট করেন ততক্ষণ আপনার সোনালি, তবে সচেতন থাকুন যে এটি একটি প্রান্তের ঘটনা এবং সাধারণভাবে আপনি আপনার ভিউ-মডেলটিকে যে কোনও মডেলটি কভার করেন তার চারপাশে মোড়াতে সর্বদা 90% ভাল।


2

আপনি যদি মডেল -> ভিউমোডেল থেকে যাওয়ার চেষ্টা করছেন যদি প্রচুর ঘর্ষণ হয় তবে অটোম্যাপারের মতো কিছু চেষ্টা করুন। এটি ম্যানুয়ালি অনুলিপি করার বৈশিষ্ট্যগুলির সাথে সম্পর্কিত টেডিয়ামটি সরিয়ে দেয়।


1

আমার এখানে একই সন্দেহের কারণেই আমি এখানে এসেছি এবং আমি নিশ্চিত হয়েছি যে আমি সর্বদা মডেলের পরিবর্তে মডেলটি দেখি।

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

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

মডেলটি আপডেট করার ক্ষেত্রে সেভ / বাতিল করার ক্ষেত্রে আরও পরিষ্কার কিছু নেই।


এই পোস্টটি পড়ার চেয়ে শক্ত (পাঠ্যের প্রাচীর)। আপনি এটিকে আরও ভাল আকারে সম্পাদনা করতে আপত্তি করবেন ?
gnat

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