ডিটিও = ভিউমোডেল?


102

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

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

আমার প্রশ্ন: ডেটা স্থানান্তর অবজেক্ট এবং ভিউমোডেলগুলি কি একই জিনিস? বা ভিউমোডেলটি কোনও ডিটিওর এক ধরণের উপ-প্যাটার্ন?


9
আমি মনে করি যে এএসপি.নেট এমভিসি-তে ভিউমোডেলগুলি ডাব্লুপিএফ (এমভিভিএম) এর ভিউমোডেলগুলির 100% সমতুল্য নয়, বেশিরভাগ উত্তরে এমভিভিএমের উল্লেখ রয়েছে এবং আপনি এএসপি.নেট এমভিসি-র সাথে কাজ করছেন।
ম্যাথিজ ওয়েসেলস

উত্তর:


104

কোনও ডিটিওর প্রজ্ঞাগত সংজ্ঞা হ'ল কোনও আচরণ ছাড়াই কোনও বস্তুর ডেটা আকার।

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

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


আপনি কি এটি ব্যাখ্যা করতে পারেন: "ডিটিও কোনও আচরণ ছাড়াই কোনও সামগ্রীর ডেটা আকৃতি"?
রোজবেহ এস

2
অর্থ ... ডিটিও ক্লাসে সাধারণত বৈশিষ্ট্য থাকে এবং ব্যবসায়িক যুক্তি ইত্যাদির সাথে কোনও পদ্ধতি থাকে না ...
ড্যানিয়েল অগর

71

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


4
এটি একটি দুর্দান্ত উত্তর; তথ্যে সংক্ষিপ্ত যদিও।
ফিল

5
কেন asp.net এমভিসিতে ভিউমোডেলটি কোনও ডিটিওর মতো হওয়া উচিত? ওটা কোন অর্থ প্রকাশ করে না. একটি ভিউমোডেলের এমন একটি আচরণ থাকতে পারে যা একটি ডিটিও নয়। এটি এমভিসি নির্ভর করে না।
এলিজাবেথ

8
ASP.NET এমভিসি ভিউমোডেল এবং এমভিভিএম ভিউমোডেলের মধ্যে পার্থক্য করার জন্য +1।
রোনাল্ড

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

27

ডিটিও! = ভিউমোডেল

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


2
সুতরাং ডিটিও কেবল স্ট্রাক্ট হতে পারে (বা এমন কোনও শ্রেণি যা কোনও স্ট্রাক্টের সক্ষমতা নকল করা উচিত)?
সর্বোচ্চ আলেকজান্ডার

20

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

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

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

http://blog.jpboodhoo.com/CommentView,guid,21fe23e7-e42c-48d8-8871-86e65bcc9a50.aspx

সাধারণ ক্ষেত্রে যেমন ইতিমধ্যে বলা হয়েছে যে এই ডিটিও ভিউ বাঁধার জন্য ব্যবহার করা যেতে পারে তবে আরও জটিল ক্ষেত্রে এর জন্য ভিউমোডেল তৈরি করা এবং ডিটিও থেকে ভিউমোডেল থেকে ডেটা আনলোড করা প্রয়োজন যা সম্ভবত আরও কাজ (এমভিভিএম প্যাটার্ন প্রয়োগ করার সময়) ।

ইতিমধ্যে আবার ডিটিও হিসাবে উল্লিখিত হয়েছে! = ভিউমোডেল

এবং

ডিটিও এবং ভিউমোডেলের জীবনের বিভিন্ন উদ্দেশ্য রয়েছে


13

প্রথমত, প্রধান পার্থক্য হ'ল ভিউমোডেলের এমন আচরণ বা পদ্ধতি থাকতে পারে যা ডিটিও আবশ্যক নয় !!!

দ্বিতীয়ত, এএসপি.নেট এমভিসি তে ভিওমোডেল হিসাবে ডিটিও ব্যবহার করা আপনার অ্যাপ্লিকেশনটি ডিটিওর সাথে দৃly়ভাবে মিলিত করে তোলে এবং এটি ডিটিও ব্যবহারের ঠিক বিপরীত উদ্দেশ্য। যদি আপনি এটি করেন তবে আপনার ডোমেন মডেল বা ডিটিও ব্যবহার করে কী পার্থক্য রয়েছে, অ্যান্টি-প্যাটার্ন পেতে আরও জটিলতা রয়েছে?

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

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

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

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


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

সালুট জিন-ফ্রানসোইস বিউচ্যাম্প :) এএসপি.নেট এমভিসি ইউআরএল প্র্যামগুলিকে কোনও অবজেক্টে পার্স করতে পারে, উদাহরণস্বরূপ: ধরুন আমার এই ম্যাপিংটি একটি সূচি পদ্ধতি এজাজ / সূচি / {জবআইডিআইডি /} রেজাল্ট টোস্কিপ} / {রেজাল্টস টোসেন্ড end "থাকার পরিবর্তে আছে কন্ট্রোল ইনডেক্সে (ইন্টি জবআইডি, ইন রেজাল্টস টোস্কিপ, ইন রেজাল্টস টোসেন্ড) আমার ইনডেক্স (অনুরোধ) থাকবে (অনুরোধ এমন একটি বস্তু যা 3 ক্ষেত্রের জবআইডিকে আবদ্ধ করে ...) সুতরাং এখন প্যারামের পরিবর্তে আপনি নিজের অ্যাপ্লিকেশনটির সাথে এনক্যাপসুলেট করে কথা বলছেন ডেটা, তাই হ্যাঁ আমরা বলতে পারি উদাহরণস্বরূপ requestDTO আপনি অন্য একটি ক্ষেত্র আপনি শুধুমাত্র DTO না API ইন্টারফেস পদ্ধতি পরিবর্তন যোগ
riadh gomri

9

কিছু সাধারণ দর্শনের জন্য আমি আমার ডিটিওকে আমার মডেল হিসাবে ব্যবহার করব, তবে ভিউগুলি আরও জটিল হয়ে উঠলে আমি ভিউমোডেলগুলি তৈরি করব।

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


2
দুর্দান্ত ব্যবহারিক উত্তর।
সাইমন তেউসি

0

আপনি যদি ডিটিওকে ভিউমোডেল হিসাবে ব্যবহার করেন, এর অর্থ আপনি ডিটিওতে উচ্চ নির্ভরতা তৈরি করছেন কারণ কোনও কারণে আপনি ডিটিও পরিবর্তন করছেন তবে এটি ভিউমোডেলে প্রভাব ফেলতে পারে।

ডিটিও ব্যবহার করা ভাল এবং ভিউমোডলে রূপান্তর।


-1

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

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