মডেল-ভিউ-কন্ট্রোলার: ব্যবহারকারী কি ভিউয়ের সাথে বা কন্ট্রোলারের সাথে যোগাযোগ করে? [বন্ধ]


14

আমি সম্প্রতি এমভিসি ডিজাইন প্যাটার্ন সম্পর্কে শিখেছি। আমি হেড ফার্স্ট ডিজাইন প্যাটার্ন বইটি থেকে শিখছি।

এই বই অনুসারে (আমি যদি সঠিকভাবে বুঝতে পারি):

মডেলটি বেশিরভাগ অ্যাপ্লিকেশন যুক্তি এবং ডেটা।

দেখুন মূলত গুই চাক্ষুষরূপে মডেল উপস্থাপন করে এমন ব্যবহারকারী হয়।

কন্ট্রোলার 'মধ্যস্থতা' করার জন্য দায়ী এবং ভিউ এবং মডেলটির মধ্যে 'মিডলম্যান' হিসাবে কাজ করবে। ব্যবহারকারীরা কোনও পদক্ষেপ নিয়েছে এবং কন্ট্রোলারকে মডেলটির পদ্ধতি কলগুলিতে অনুবাদ করে View

তবে ওয়েবে প্রচুর স্থানগুলি সেই বই থেকে আমি যা বুঝি তার সাথে বিরোধিতা করে। তাদের দাবি যে ব্যবহারকারী সাধারণত নিয়ন্ত্রণের সাথে যোগাযোগ করে, ভিউয়ের সাথে নয়।

কোনটি সত্য বা আরও সাধারণ? ব্যবহারকারী কি সরাসরি কন্ট্রোলারের সাথে, বা সরাসরি দেখার সাথে যোগাযোগ করে? উভয় পদ্ধতির গ্রহণযোগ্য? কোনটি বেশি সাধারণ?


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

1
২ টি উত্তর, উভয়ই আপভোট হয়েছে, একজন বলেছে "দৃষ্টিভঙ্গির সাথে ইন্টারেক্টিভ করুন" অন্যটি বলেছেন "কন্ট্রোলারের সাথে ইন্টারঅ্যাক্ট করুন" .... আমাকে ভাবায় এমভিসি যদি তেমন কোনও মৌলিক স্তরে বিভ্রান্ত হয় না তবে এটি কোনও স্থাপত্যের পক্ষে যথেষ্ট ভাল নয়!
gbjbaanb

স্ট্যাকওভারফ্লোতে আরও দেখুন, বাছাইয়ের যুক্তি কি মডেল, দর্শন বা
ইজকাটা

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

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

উত্তর:


18

ব্যবহারকারী ভিউয়ের সাথে ইন্টারঅ্যাক্ট করে তবে ভিউটি অবশ্যই কন্ট্রোলারের সাথে ক্রিয়াগুলি যোগাযোগ করে । নিয়ন্ত্রক আপডেট করতে পারে মডেল , কিন্তু এটা যে / কোন পরিবর্তনের সঙ্গে প্রয়োজন হয় না।

আমি যে বিবরণ দিচ্ছি তা এমভিসির .NET প্রয়োগের সাথে আমার ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে। আপনার বাস্তবায়ন আলাদা হতে পারে।

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

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

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


হালনাগাদ

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

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

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

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

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


উইকিপিডিয়ায় এমভিসি সম্পর্কিত একটি নিবন্ধ রয়েছে

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

মাইক্রোসফ্টের এমভিসির ওভারভিউ থেকে

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

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

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

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


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

1
আমার দৃষ্টিকোণ থেকে, না। এপিআই ভিউয়ের জায়গা নেয়।
অ্যাডাম জুকারম্যান

তবে এপিআই একটি সাধারণ হতে পারে url-routes, এটিতে রাখা Controller। আমার অর্থ
মাহদি

1
@ অ্যাডামজাকারম্যান উত্তর দেওয়ার জন্য ধন্যবাদ। পরবর্তী মন্তব্যে আমি বর্ণনা করব যে আমি কীভাবে একটি সাধারণ এমভিসি বাস্তবায়ন কাজ করে মনে করি , দয়া করে এটি সঠিক কিনা তা নিশ্চিত করুন। ধন্যবাদ
আভিভ কোহন

2
@ মাহদী একটি এপিআই, সংজ্ঞা অনুসারে, কোনও প্রোগ্রামিং ইন্টারফেস হিসাবে রয়েছে , কোনও ইউজার ইন্টারফেস নয়। প্রোগ্রামগুলি API এর সাথে ইন্টারেক্ট করে, ব্যবহারকারীরা ভিউয়ের সাথে ইন্টারঅ্যাক্ট করে।
এরিক কিং

4

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

পৃষ্ঠতলে মনে হয় যে ব্যবহারকারী জিইউআইয়ের সাথে যোগাযোগ করছেন - এটি কোনও নন-প্রোগ্রামারের সাথেও আরও বোঝা যায়, তবে আপনি মূলত কন্ট্রোলারের সাথে ভিউয়ের সাথে কথা বলছেন না ।

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

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


2
+1 এটি সঠিক। মেনু এবং সরঞ্জামদণ্ডের মতো জিনিসগুলি জিইউআইয়ের অংশ তবে দেখার অংশ নয়, এবং সরাসরি নিয়ামকের কাছে যান। কীস্ট্রোক একইভাবে।
david.pfx

1
বিমূর্ততা হিসাবে দর্শনগুলি বিদ্যমান থাকার কারণ তাই আমরা যখন প্রয়োজন তখন সেগুলি সহজেই প্রতিস্থাপন করতে পারি। বিভিন্ন প্ল্যাটফর্মের একটি অ্যাপ্লিকেশনের জন্য একটি নিয়ামক একই হতে পারে তবে মতামতগুলি ব্যবহারকারীর অঙ্গভঙ্গিগুলি আলাদাভাবে স্বীকৃত করতে হবে এবং তাদেরকে নিয়ামক ক্রিয়াকলাপে অনুবাদ করতে হবে। আমি তাই একমত নই যে ব্যবহারকারীরা সরাসরি নিয়ন্ত্রকদের সাথে যোগাযোগ করেন।
ফুহরম্যানেটর

1
@ মাহদী আমি বলব যে সেক্ষেত্রে কোনও ব্যবহারকারীর ইন্টারঅ্যাকশন মোটেই নেই, এটি নিয়ামক হিসাবে প্রোগ্রামিয়ালি যোগাযোগ করার মতামত। কেবলমাত্র ইন্টারঅ্যাকশন যা ব্যবহারকারীর দ্বারা সূচিত হয়েছিল তা ভিউয়ের মাধ্যমে।
এরিক কিং

1
@ ডেভিড.পিএফএক্স কীস্ট্রোক ব্রাউজার উইন্ডো থেকে সরাসরি একটি নিয়ামকের কাছে যেতে পারে না।
অ্যাডাম জুকারম্যান

1
@ ইজকাটা "দ্য ভিউ হ'ল কোডের অংশ যা অনুরোধগুলি প্রেরণ করা হয়" - দুঃখিত তবে আমি এখানে যা শুনেছি এটি এটি সবচেয়ে খারাপ। এটা কীভাবে সম্ভব? আপনি একটি নিবন্ধ বা বইয়ের একটি রেফারেন্স সরবরাহ করে এটি ব্যাক আপ করতে পারেন?
মাহদি

1

আসুন ব্যবহারকারীরা কেন দৃশ্যের সাথে সরাসরি ইন্টারঅ্যাক্ট করে এবং কন্ট্রোলারদের নয় তার একটি নমনীয় উদাহরণ ব্যবহার করুন।

আইফোনের সংগীত অ্যাপটিতে একটি প্লেলিস্ট প্লে করা একটি উচ্চ স্তরের বৈশিষ্ট্য। "একটি প্লেলিস্ট প্লে করুন" অ্যাপ্লিকেশনটিতে একটি নিয়ামকের কাজ is

এই ফাংশনটি সক্রিয় করার একাধিক উপায় রয়েছে। আমি অ্যাপ্লিকেশনটির ভিতরে প্লেলিস্টে ক্লিক করতে পারি বা সিরিকে (ভয়েস ইন্টারফেস) একই ফাংশনটি সম্পাদন করতে বলতে পারি। এগুলি দুটি ভিন্ন অঙ্গভঙ্গি যা বিভিন্ন দর্শন দ্বারা স্বীকৃত।

প্রতিটি দর্শনের প্রতিক্রিয়াও আলাদা। সিরি আপনাকে বলবে যে এটি আপনার অনুরোধ করা সঙ্গীত বাজছে। সঙ্গীত অ্যাপটি আপনাকে প্লেলিস্ট প্লে করছে এমন একটি চাক্ষুষ প্রতিক্রিয়া দেখাবে।

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