বাছাইয়ের যুক্তিটি কি মডেল, দৃশ্যে বা নিয়ামকের মধ্যে রাখা উচিত? [বন্ধ]


157

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

যথাযথ এমভিসি ডিজাইন অনুসারে, আমি আমার স্তরটিতে বাছাইয়ের যুক্তিটি কী স্তরে রাখব: মডেল, দর্শন বা নিয়ামক?

সম্পাদনা : লার্শের প্রশ্নের জবাবে, "আপনি কি এমন কোড বোঝাচ্ছেন যা কোন ধরণের অর্ডার পছন্দ করে তা নির্ধারণ করে? বা যে কোডটি বাছাই করে?", আমি মূলত সেই কোডটির সাথে উল্লেখ করছি যা নির্ধারণ করে যে কোন ক্রম ক্রমটি পছন্দ হয়েছে।


6
মন্তব্যে মতবিরোধের সমাধান করার জন্য, আপনি "যুক্তি বাছাই" দ্বারা বোঝাতে চাইলে এটি সহায়ক হবে। আপনি কি কোডটি বোঝাচ্ছেন যা কোন ধরণের অর্ডার পছন্দসই তা নির্ধারণ করে? বা কোড যা বাছাই করে?
LarsH

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

9
হতে পারে এটি প্রোগ্রামারগুলিতে স্থানান্তরিত হওয়া উচিত।
আলফ্রেডো ওসারিও

57
অবশ্যই নিয়ামক মধ্যে। হয় বা মডেল হয়। বা ভিউ।
জনতা

2
অবশ্যই কখনও নয়, কখনও কখনও নয়।
contactmatt

উত্তর:


49

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

এমভিসি বর্ণনা অনুযায়ী ,

একজন নিয়ামক মডেলটির দর্শন উপস্থাপনা পরিবর্তন করার জন্য এর সাথে সম্পর্কিত দৃশ্যে কমান্ড প্রেরণ করতে পারেন (উদাহরণস্বরূপ, একটি নথির মাধ্যমে স্ক্রোল করে)। এটি মডেলের স্থিতি আপডেট করার জন্য মডেলকে আদেশ পাঠাতে পারে (উদাহরণস্বরূপ একটি দস্তাবেজ সম্পাদনা)।

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


8
যদি একই ডেটাটি আলাদা আলাদাভাবে বাছাই করা হয় এমন দুটি ভিন্ন দর্শনে প্রদর্শিত হয়?
s4y

এটি একই পদ্ধতিতে করা উচিত, Model.SortAscending () এবং Model.SortDescending () এবং কন্ট্রোলার দ্বারা ডাকা হয় called
ব্রিজ

1
@ ব্রিজ সঠিক এমভিসিতে, দুটি মতামত কি একই মডেলটি ভাগ করতে পারে না?
কোভিকো

@ সিডনিউসিং যদি কোনও বাছাই করার পদ্ধতিটি বোঝা যায় যা আলাদা পরামিতি নেয়। উদাহরণস্বরূপ public void Sort(bool sortByDescending = false), মিথ্যা হলে এটি আরোহণের দ্বারা বাছাই করে। অথবা যুক্তিটি খুব আলাদা হলে কেবল দুটি পৃথক বাছাই পদ্ধতি রয়েছে।
ম্যাটএমসিগোয়ান

@ সিডনিউসির দুটি ভিন্ন মডেল রয়েছে যা একটিমাত্র তৃতীয় মডেলকে বাছাইয়ের যুক্তি ব্যতীত সমস্ত কিছুকে অর্পণ করে। docs.google.com/drawings/d/…
ডানফোল্ড

62

বাছাই অর্ডার কে নিয়ন্ত্রণ করে?

সাধারণ এমভিসি ডায়াগ্রাম( উইকিপিডিয়া থেকে )

1) তথ্য নিজেই মধ্যে প্রাকৃতিক ক্রম:

অর্ডারটি মডেলের অংশ, সুতরাং এটি সেখানে যাওয়া উচিত। "সমস্ত ডেটা" এর কাঁচা টানগুলি সাজানো ক্রমে ডেটা ফেরত দেয় এবং সাজানোর ক্রমটি বেছে নেওয়ার জন্য কোনও ইন্টারফেস নেই।

2) ব্যবহারকারীর ডেটা কীভাবে দেখবে তা নিয়ন্ত্রণ করা উচিত:

ভিউটি এমন একটি ইন্টারফেস সরবরাহ করবে (যেমন আরোহী / উতরিত তীরগুলি) যা কন্ট্রোলারের সাথে যোগাযোগ করে এবং মডেল ডেটাতে অনুরোধ করা বাছাই করতে যথেষ্ট পরিমাণে ডেটা বুঝতে পারে। তবে, ডেটার একটি কাঁচা টান অগত্যা (1) এর বিপরীতে বাছাই করতে হবে না।

উভয় ক্ষেত্রে,

দর্শনটি বুঝতে পারে না যে এখানে একটি বাছাই চলছে, অন্যটি, যা বাছাইয়ের দিকটি বেছে নেওয়া হয়েছে তা প্রদর্শনের ক্ষমতা। যুক্তি সেখানে রাখবেন না।

ছোট সাবধান

বাছাইয়ের কার্যকারিতা বিশুদ্ধরূপে এক পরিস্থিতিতে যেমন ভিউতে যেতে পারে (যে আমি অফহ্যান্ডের কথা ভাবতে পারি; আরও কিছু হতে পারে):

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


58
দৃশ্যটি ব্যবহারকারীকে দেখতে পাবে !?
ফরহের

41
মডেলটি ভিউ আপডেট করে !?
ছদ্মবেশ

13
এই উইকিপিডিয়া নিবন্ধটি স্তন্যপান: "কম্পোনেন্ট ইন্টারঅ্যাকশন" বিভাগটি ডানদিকে প্রদর্শিত চিত্রের সাথে দ্বন্দ্ব করেছে (যে আপনি এখানে পোস্ট করেছেন)। দ্বিতীয়ত, মডেলটি ভিউটিকে "আপডেট" করে না। যখন কোনও রাষ্ট্র পরিবর্তন হয় তখন এটি দর্শনটি উল্লেখ করে। কীভাবে আপডেট করবেন সেই দৃশ্য স্থির করে। বিতৃষ্ণা। আপনি যখন অবাক হন যে কেন প্রায় এই প্রশ্নটির 1000 টি বিভিন্ন উত্তর রয়েছে যখন এতটা অস্পষ্ট তথ্য চারপাশে ভাসমান।
কাইলেম

4
@ সিএইচও শিওর আমরা একমত হতে পারি যে উইকিপিডিয়া গ্রাফটি বেশ অদ্ভুত, ঠিক আছে? :)
deceze

6
@ স্টেফেনসার্কসম ক্যামেনার এবং অন্য সবাই: না, চিত্রটি সঠিকভাবে বোঝায়: এটি কোড সংযোগ নয়, ডেটা প্রবাহকে দেখায় ।
ইজকাটা

18

এমভিসি বর্ণনা অনুযায়ী ,

একজন নিয়ামক মডেলটির দর্শন উপস্থাপনা পরিবর্তন করার জন্য এর সাথে সম্পর্কিত দৃশ্যে কমান্ড প্রেরণ করতে পারেন (উদাহরণস্বরূপ, একটি নথির মাধ্যমে স্ক্রোল করে)। এটি মডেলের স্থিতি আপডেট করার জন্য মডেলকে আদেশ পাঠাতে পারে (উদাহরণস্বরূপ একটি দস্তাবেজ সম্পাদনা)।

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

সম্পাদনা: মন্তব্যে স্বীকৃত একাধিক ভুল বোঝাবুঝি পরিষ্কার করার জন্য, "সাজানোর যুক্তি" সারণি সম্পাদনকারী কোড নয় ; এটি কোডটিই বাছাই করে। বাছাইয়ের যুক্তি পৃথক আইটেমের সাথে অর্ডার স্থাপনের জন্য একে অপরের সাথে তুলনা করে (উদাহরণস্বরূপ একটি উদাহরণের মাধ্যমে IComparator<T>) বা এমন যুক্তি রয়েছে যা কোনও বাহ্যিক সিস্টেম দ্বারা আদেশের জন্য ব্যবহার করার জন্য কোনও বস্তু তৈরি করে (যেমন উদাহরণের মাধ্যমে IOrderedQueryable<T>)। এই যুক্তিটি আপনার নিয়ামকের অন্তর্ভুক্ত, কারণ এটি আপনার অ্যাপ্লিকেশনটির "ব্যবসায়" পাশ সম্পর্কিত জ্ঞান প্রয়োজন। এটি সম্পূর্ণরূপে বাছাই করার জন্য পর্যাপ্ত, তবে এটি কোড সম্পাদন করে যা আসলে সম্পাদন করে separateএটা। যে ধরণের কোডটি বাছাই করে তা আপনার দৃষ্টিতে, আপনার মডেলটিতে বা এমনকি আপনার মডেলটিকে সমর্থন করে এমন অধ্যবসায় স্তরতেও হতে পারে (যেমন আপনার এসকিউএল ডাটাবেস)।


12
-1 আপনি কীভাবে এই উদ্ধৃতিটি থেকে এই উপসংহারটি পরিচালনা করেছিলেন? কোথাও কোথাও বলা হয়েছিল যে মডেল থেকে নিয়ামক তথ্য পুনরুদ্ধার করার কথা? নিয়ন্ত্রণকারী রাষ্ট্র পরিবর্তন করার জন্য কমান্ড প্রেরণ করে। তথ্য উত্তোলন বা হেরফের সম্পর্কে কিছুই বলা হয়নি।
tereško

3
@ তেরেখো আপনি আমার উত্তরটি থেকে কীভাবে সিদ্ধান্ত নিতে পেরেছিলেন যে মডেল থেকে নিয়ামককে তথ্য পুনরুদ্ধার করতে হবে? "যুক্তি অনুসারে বাছাই" বলতে আমি কেবল যুক্তি বোঝাই যা অর্ডার স্থাপনের জন্য প্রয়োজনীয় - সি # পদগুলিতে এটি বাস্তবায়ন সরবরাহ করে IComparer<T>। মডেল থেকে ডেটা পুনরুদ্ধার সহ, বাছাইয়ের অবশিষ্ট "বয়লারপ্লেট মেকানিক্স" দেখুন পর্যন্ত।
ডাসব্লিংকনলাইট

3
".. বাছাইয়ের যুক্তি নিয়ন্ত্রকের অন্তর্ভুক্ত .." , এর আর কী অর্থ?
তেরেখো

3
"একটি নিয়ামক দৃশ্যের উপস্থাপনা পরিবর্তন করতে এর সাথে সম্পর্কিত দৃশ্যে কমান্ড প্রেরণ করতে পারেন" সত্যই মনে হয় যে নিয়ন্ত্রণটি কমান্ডের প্রতিক্রিয়া হিসাবে ভিউটি বাছাই করবে।
স্যামুয়েল এডউইন ওয়ার্ড

1
@ কাইলিম তবে ভিউটিতে বাছাইয়ের যুক্তি থাকতে পারে এমন সবসময় পর্যাপ্ত জ্ঞান থাকে না। উদাহরণস্বরূপ, এমন একটি ক্ষেত্র বিবেচনা করুন যা এনামগুলির মধ্যে একটির সাথে একটি সাংখ্যিক কোড রয়েছে {Unknown, Pass, Fail}। আরও ধরে নিন যে Unknownব্যবহারকারী বাছাই করা বা অবতরণী আদেশ নির্বিশেষে সর্বদা সর্বদা বাছাই করতে হবে। এই যুক্তিটিকে দৃশ্যে রাখলে codeক্ষেত্রের অভ্যন্তরে থাকা ডেটাগুলির ব্যবসায়ের প্রকৃতি সম্পর্কে আপনার দর্শনকে খুব বেশি বলা হবে । দর্শনটিকে এটি জানা উচিত নয়: এটি কেবলমাত্র জানা যায় যে ব্যবহারকারী একটি "সাজান" ইঙ্গিতটি সম্পাদন করে (যেমন একটি শিরোনাম ক্লিক করেছে); বাকিগুলি নিয়ামকের উপর নির্ভর করে।
ডাসব্লিংকনলাইট

10

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

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

সেই অর্থে, বাছাইটি "নিয়ন্ত্রকের মধ্যে" রয়েছে, তবে যে কোডটি বাছাই করে তা নিয়ন্ত্রকের মধ্যে প্রয়োগ করা উচিত নয়, কেবল সেখান থেকে অনুরোধ করা হয়েছিল।


5
আমাকে সম্প্রতি জানানো হয়েছে যে কিছু লোক "পরিষেবা স্তর" (ব্যবসায়িক যুক্তি) মডেলটির অংশ হিসাবে বিবেচনা করে।
মারভো

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

তাহলে এমভিসি প্যাটার্নে ব্যবসায়ের যুক্তিটি "লাইভ" কোথায় থাকে?
মারভো

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

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

8

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

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

যদি অর্ডারটি ডোমেনের অন্তর্নিহিত অংশ হয় তবে এটি মডেলটিতে যাওয়া উচিত।


"একটি তুলনাকারী বা একটি সাজানোর বর্ণনা সরবরাহকারী" "কাজ করা" হিসাবে গণনা করা হয়? কারণ "বাছাইয়ের কাজটি" বাছাই পদ্ধতিতে বা মডেলের ব্যাক-এন্ডে করা হলেও এমনকি একটি বাছাইয়ের যুক্তি একটি তুলনাকারী বা একটি বাছাইকারী বিবরণীতে আবদ্ধ হয়।
ডাসব্লিংকনলাইট

আপনি যা সরবরাহ করছেন তার উপর নির্ভর করে: পাস করা ঠিক আছে। তবে তুলনাকারী মডেল বা দেখার অংশ হওয়া উচিত, নিয়ামক নয়।
জেনস স্কাউডার

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

সুতরাং পছন্দটি হল - আপনি কি মনে করেন যে এটি ডোমেন ব্যবসায় যুক্তি বা উপস্থাপনা যুক্তির অংশ ic

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

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


12
"যুক্তি বাছাই" এর মাধ্যমে তারা কী বোঝায় তা আপনার নিজের অনুমানের প্রয়োগ করে আপনি একাধিক উত্তরকে গুরুত্ব দিয়েছিলেন । আপনার অনুমানটি একেবারেই ভুল - সাজানোর যুক্তিকে পুনরুদ্ধার অন্তর্ভুক্ত করে না এবং কখনও করেনি।
ডাসব্লিংকনলাইট

1
@ ড্যাসব্লিংকনলাইট, হ্যাঁ, আমি একাধিক বিষয়কে সমর্থন করি কারণ তারা সকলেই বোঝায় যে নিয়ামককে বাছাই করা উচিত। যা ভুল। এবং .. জনগণ .. দয়া করে আপনি একমত না হওয়ার কারণে দয়া করে আমার মন্তব্যগুলি চিহ্নিত করা বন্ধ করুন।
tereško

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

@ ডাসব্লিংকনলাইট নাহ .. আমি আমার মন্তব্যে ভুগছিলাম যা এই বিষয়বস্তুতে বিলুপ্ত হয়ে গেছে।
tereško

5

অন্যান্য উত্তরগুলির মত করে আমি নিয়মিত প্যাটার্নের সাথে সামঞ্জস্য থাকতে নিয়ামকের মধ্যে এটি করতাম। যুক্তির জন্য নীচে দেখুন।

আমি এটিকে স্থির করে চলেছি এবং উত্তরগুলি এবং সম্পর্কিত উপাদানগুলি পড়ছি এবং ব্যবহারিকভাবে বলতে গেলে আমি বলতে চাই এটি আপনার আবেদনের উপর নির্ভর করবে:

এটি কি কোনও মাঝারি / বৃহত অ্যাপ্লিকেশন এবং / অথবা এর সাথে একাধিক ইউআই যুক্ত রয়েছে (যেমন একটি উইন্ডোজ অ্যাপ, ওয়েব ইন্টারফেস এবং ফোন ইন্টারফেস)।

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

যদি এটি একটি ভাল সংজ্ঞায়িত একক UI ওয়েবসাইট হয় এবং আপনি EF কোড ফার্স্ট এর মতো কিছু ব্যবহার করছেন এবং আপনার কাছে পরিষেবা পরিষেবা তৈরি করার কোনও উদ্দেশ্য নেই বা আছে এবং এটি অর্জনের জন্য বক্স এক্সটেনশন পদ্ধতিতে কোনও সরল পদ্ধতি ব্যবহার করার পরিকল্পনা করছেন:

  • এক্ষেত্রে আমি সম্ভবত এটি নিয়ামক হিসাবে রাখতাম কারণ সময় / বাজেটের ক্ষেত্রে এটি সর্বোত্তমভাবে উপযুক্ত।

উপরের BUT এর মতো হলে বাক্স এক্সটেনশন পদ্ধতিতে আউট প্রয়োগ করা যায় না।

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

সংক্ষেপে:

কৌতূহল উত্তর: পরিষেবা স্তর

ব্যবহারিক উত্তর: সাধারণত নিয়ামক


কোন সংজ্ঞায় নিয়ন্ত্রক "দেখার জন্য ডেটা প্রস্তুত করার" জন্য দায়ী?
tereško

1
@ tereško কোথায় মডেল "প্যাসিভ" হিসাবে এখানে বর্ণিত হয় msdn.microsoft.com/en-us/library/ff649643.aspx বৈচিত্র বিভাগে। "এইচটিটিপি এটির একটি উদাহরণ" দেখুন। যদিও একজন পিউরিস্ট এই বিষয়ে মতবিরোধ করতে পারে তবে এমভিসি থেকে শুরু করা সূচনাকারীদের পক্ষে এটি আরও সহজ হতে পারে যেখানে তারা EF বা অন্যান্য মডেলগুলি সরাসরি নিয়ামক হিসাবে ব্যবহার করতে পারে এবং কোনও বিএএল-এর মাধ্যমে না ভেবে এই পদ্ধতিটি আরও বোঝার পথে বাধা হ্রাস করে।
লুক বাঘন

1
আপনি যে বিষয়ে কথা বলছেন তা হ'ল রক্তাল্পতা মডেল।
tereško

পয়েন্টটি উল্লেখ করেছে, আপনার পরামর্শ অনুসারে আমি আপত্তিজনক বর্ণনাগুলি সরিয়েছি। ইনপুট জন্য চিয়ার্স!
লুক বাঘান

3

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

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


2

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

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

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

@foreach(Image i in Model.Image.OrderBy(e => e.DisplayOrder)){ //etc etc... }

একটি নির্দিষ্ট ব্যবসায়িক লজিক স্তর উল্লেখ ছিল, যা আমি আমার ব্যবসায়িক যুক্তির 80% সম্পাদন করতেও ব্যবহার করি, তবে আমি আমার ব্যবসায়িক লজিক স্তরটিতে বাছাইয়ের কার্যকারিতা লিখতে যাচ্ছি না যা বাক্স থেকে বেরিয়ে আসা কিছুটির অনুকরণ করে that সত্তা ফ্রেমওয়ার্ক থেকে।

আমি মনে করি না যে এই প্রশ্নের সঠিক উত্তর আছে, তা বলা ছাড়া অন্য; আপনার সম্ভাব্য জটিল ব্যবসায়ের যুক্তি যেখানে সম্ভব সেখানে কিন্তু চক্রটিকে পুনর্নির্মাণের ব্যয়ে নয়।


আমি একই জিনিসটি ভাবছিলাম, এখানে উত্তরগুলি ওআরএম এবং সম্প্রসারণ পদ্ধতিগুলিকে বিবেচনায় নেয় না বলে মনে হয়। বেশিরভাগ ক্ষেত্রে লজিক বাছাই করা যেমন সহজ হবে myList.OrderBy(x => x.CreationDate)- এটি করার জন্য সত্যিই কোনও অপ্রয়োজনীয় অতিরিক্ত স্তর প্রবর্তনের প্রয়োজন নেই। এটি যুক্ত করার জন্য, যদি তাদের পেজড এবং সাজানো ডেটা প্রয়োজন হয় তবে তারা কী করবে? পুরো টেবিলটি জিজ্ঞাসা করুন, এটি সাজান তারপরে তাদের যা প্রয়োজন তা রাখুন? একজন কেবল কল করতে পারে myList.OrderBy(x => x.Date).Skip((page-1)*pageSize).Take(pageSize)এবং কোনও অপ্রয়োজনীয় ডেটা পুনরুদ্ধার করা যায় না।
বালজস

1

ধরে নিন যে আপনার এমভিসি ওয়েবসাইট, ওয়েবফর্ম ওয়েবসাইট এবং একটি মোবাইল অ্যাপ্লিকেশন রয়েছে।

আপনি যদি এই উপস্থাপনা স্তরগুলির মধ্যে সামঞ্জস্য রাখতে চান তবে আমি উপস্থাপনা স্তরের বাইরে বাছাই করতে চাই। পরিষেবা ভাল প্রার্থী হবে।

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


0

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


2
যে যুক্তি আরও মডেল দিকে রাখা হবে, তাই না?
রায়ান কোহন

হ্যাঁ, "পরিষেবা স্তর" সম্পর্কে আমার বোঝা এটি মডেলের অংশ।
মারভো

0

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

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

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