ভিউমোডেলকে মডেল হিসাবে ঠিক যুক্ত করা কি এই ভাল ধারণা


16

আমার সমাধানে আমার নীচের স্তরগুলি রয়েছে:

  1. App.Domain
  2. App.Service
  3. App.Core (সম্ভবত আপনি এটিকে একটি অ্যাপ ড্যাটাএলায়ার বলছেন)
  4. App.Web

সফ্টওয়্যার ডিজাইনের ধরণটি আমার প্রশ্ন নয়, আমি মডেলটি অনুসরণ করছি Domain

public class Foo {
    public int Id {get;set;}
    public int Name {get;set;}
    public int Value {get;set;}
}

আমি এই মডেলটি ভিউতে (উদাহরণস্বরূপ হোম পৃষ্ঠা) ব্যবহার করতে চাই এবং আমি ব্যবহার করতে চাই Id, Name & Value, তাই যদি আমি ভিউমোডেলটি তৈরি করতে চাই তবে আমি নিম্নলিখিতগুলি যুক্ত করব:

public class FooViewModel {
    public int Id {get;set;}
    public int Name {get;set;}
    public int Value {get;set;}
}

সুতরাং, যে ভাল ধারণা? বা শুধু Fooপরিবর্তে ব্যবহার করবেন FooViewModel?


আমি নিশ্চিত যে আমি এটি বুঝতে পারি না। নয় Modelসাধারণত প্রেরণ View? কেন আপনি ঠিক ক্ষেত্র পুনঃ করতে হবে Modelসালে View? যদি উদ্বেগ বিচ্ছেদ একটি লক্ষ্য MVC, কি পরিস্থিতিতে এক সঙ্গে একই জিনিস করে করতে চান অধীনে Modelএবং View? যদি ViewModelউভয়ই হয় তবে কেন উভয় Modelএবং প্রসারিত / রচনা করে নয় View?
নাল

দয়া করে @ এসভিডজেনের উত্তরে আমার মন্তব্যগুলি পড়ুন
মেহেদী দেহঘানি

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

উত্তর:


20

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

সুতরাং, আমি প্রশ্নটি আপনার দিকে ফিরিয়ে দেব। যদি ডোমেন পরিবর্তিত হয়, তবে "সংস্করণ 1" ক্লায়েন্টদের কি পুরানো ইন্টারফেস ব্যবহার চালিয়ে যাওয়া গ্রহণযোগ্য? আপনি কি ইন্টারফেসে এমন কোনও শর্তাবলী বা ক্রিয়াকলাপ প্রকাশ করবেন যা "মূল ব্যবসায়ের নিয়ম" এর অংশ নয়? এবং বিপরীতভাবে?

এই ধরণের প্রশ্নগুলি মনে রাখে, যদি আপনার দৃশ্যের "ফাংশন" অন্তর্নিহিত ডোমেন মডেলটি প্রকাশ করার জন্য কঠোরভাবে হয় তবে হ্যাঁ, এটি দেখে মনে হয় এটি ডিআরওয়াই বিধি লঙ্ঘন করে।

এছাড়াও মনে রাখবেন, মডেল পরিবর্তনের সাথে আরও স্বাভাবিকভাবে পরিবর্তিত হয় এমন একটি দৃষ্টিভঙ্গি প্রকাশ করে সদস্য বৈশিষ্ট্য এবং প্রতিবিম্ব সহ কিছু ভাষায়ও সম্পাদন করা যায়। (বা চতুরতার অন্য অদ্বিতীয় মাধ্যমে কম পুনরাবৃত্তি দিয়ে ... তবে, "চতুরতা" আপনার পুনরাবৃত্তি পুনরুদ্ধারটিকে ন্যায়সঙ্গত করতে ব্যর্থ হয়))


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

@ মেহেদি আপনি কী ক্ষেত্রটি যুক্ত করার কথা ভাবছেন এবং কেন আপনার মনে হয় যে এটি কী করে বা যুক্ত করে না সে সম্পর্কে আপনার আরও সুনির্দিষ্ট হওয়া দরকার be বা সাধারণভাবে, উদ্বেগটি কী তা।
এসভিডজেন

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

কেন আমরা ভিউমোডেল ব্যবহার করছি? কিছু কারণ রয়েছে, যেমন আমরা জানি, এর মধ্যে একটি সুরক্ষার জন্য, উদাহরণস্বরূপ, এই ক্ষেত্রটি সুরক্ষিত রাখার জন্য আমাদের ক্লায়েন্টের কাছে ক্ষেত্রটি দেওয়ার User edit formদরকার নেই IsAdmin, তাই এটিই আমি উদ্বিগ্ন। আমার অদক্ষ ইংরেজির জন্য আমি দুঃখিত.
মেহদী দেহঘানি

1
অন্য একটি উপায় রাখুন, আমি মনে করি মূল প্রশ্নটি একটি সম্পূর্ণ প্রশ্ন। আপনি যে মন্তব্যটি এখানে মন্তব্যে বের করার চেষ্টা করছেন তা হ'ল আরেকটি পূর্ণ প্রশ্ন। মন্তব্যগুলি ভাল, মানের উত্তর পাওয়ার ভাল উপায় নয়।
এসভিডজেন

2

আমার কাছে এমন একটি ভিউ মডেল থাকবে যাতে কেবল একটি সম্পত্তি থাকবে, একটি ফু উদাহরণ। এইভাবে, আপনি এর কোনও সংজ্ঞা অনুসারে ডিআরওয়াই লঙ্ঘন করছেন না, যদি ফু পরিবর্তন হয়, তবে আপনার ভিউ মডেলটি স্বয়ংক্রিয়ভাবে পরিবর্তনটি দেখবে এবং আপনি নিজেকে মডেলটির সাথে সরাসরি মডেলটির ভিউ থেকে মুক্ত রাখবেন।

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

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

আমি এটি পরিষ্কারভাবে ব্যাখ্যা করেছি কিনা তা নিশ্চিত নই। যদি তা না হয় তবে আমাকে জানাবেন এবং আমি যখন জাগ্রত হব তখন চেষ্টা করে চেষ্টা করব!


-2

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


দয়া করে আমাকে বলুন, আমি যদি অন্য একটি ক্ষেত্র / সম্পত্তি যুক্ত করার সিদ্ধান্ত নিয়েছি Foo, তাই আমি Fooভিউমোডেল হিসাবেও ব্যবহার করেছি , তাই আমাকে এই নতুন ক্ষেত্রটিও ভিউতে যেতে হবে, আমি মনে করি এটি সত্যিই ভাল জিনিস নয়, আপনি কী ভাবেন ?
মেহেদী দেহঘানি

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

কী হবে যদি সেই যুক্ত ক্ষেত্রটি কোনও সুরক্ষা ক্ষেত্র ছিল, যেমন true/falseঅনুমতিের জন্য কিছু মান বা এর মতো কিছু।
মেহদী দেহঘানি

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

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