এমভিসিতে 'সি' কি আসলেই প্রয়োজনীয়?


37

আমি মডেলটির ভূমিকা এবং মডেল-ভিউ-কন্ট্রোলার প্যাটার্নটিতে বুঝতে পারি তবে কেন নিয়ামক প্রয়োজনীয় তা বুঝতে আমার খুব কষ্ট হয়েছে।

ধরা যাক আমরা একটি এমভিসি পদ্ধতির ব্যবহার করে একটি দাবা প্রোগ্রাম তৈরি করছি; গেমের অবস্থাটি মডেল হওয়া উচিত এবং জিইউআইয়ের দৃষ্টিভঙ্গি হওয়া উচিত। এক্ষেত্রে নিয়ামক ঠিক কী?

এটি কি কেবল একটি পৃথক শ্রেণীর সমস্ত ফাংশন রয়েছে যা ডাকা হবে যখন আপনি বলবেন, কোনও টাইলকে ক্লিক করুন? মডেলটিতে সমস্ত যুক্তি কেবল নিজেরাই প্রদর্শন করবেন না কেন?


1
ব্যক্তিগতভাবে, আমি এটিই করিএমন কিছু ক্ষেত্রে থাকতে পারে যেখানে এমভিসির বিকল্প নেই, তবে আমি এটি দাঁড়াতে পারি না।
মাইক ডুনলাভে

10
তিনটি শব্দ ... "উদ্বেগের বিচ্ছেদ"।
ট্র্যাভিস জে

4
নেট এর আগে প্রায় সমস্ত উইন্ডোজ প্রোগ্রাম কোনও নিয়ামক ছাড়াই ডক-ভিউ ব্যবহার করে। এটি তুলনামূলকভাবে সফল হয়েছে বলে মনে হয়।
মার্টিন বেকেট 15

মার্টিন, আন (পরিবর্তন) সক্ষম মনোলাইট।
স্বতন্ত্র

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

উত্তর:


4

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

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


36
"আপনার উদাহরণটি ব্যবহার করে কন্ট্রোলারটি সিদ্ধান্ত নেবে যে কোনও আইনী পদক্ষেপ কি না"। এটি খারাপ উদাহরণ :( এই জাতীয় যুক্তি মডেলটিতেও থাকবে Otherwise নইলে আপনার যুক্তি নিয়ন্ত্রক এবং মডেলের মধ্যে বিভক্ত হয়
ডাইম

6
@ ডিম - মডেলটিতে কোনও যুক্তি থাকতে হবে না। নিয়ামক হ'ল যুক্তিযুক্ত হ'ল, সুতরাং "নিয়ন্ত্রণ"।
ট্র্যাভিস জে

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

25
ওওপির পুরো পয়েন্টটি হ'ল ডেটা এবং আচরণের একত্রে বিটগুলি একসাথে রাখা এবং অভ্যন্তরীণভাবে সজ্জিত করে রাখা। "মডেল" মডেল আচরণ এবং ডেটা উভয়ই।
মিসকো

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

39

মডেলটিতে সমস্ত যুক্তি কেবল নিজেরাই প্রদর্শন করবেন না কেন?

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

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

মডেল রেখে আলাদাভাবে দেখুন কী পান তা দেখুন:

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

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

  • উভয় মডেলের জন্য পরীক্ষা লিখতে সহজ এবং তারা যেভাবে করা উচিত সেভাবে কাজ করে তা নিশ্চিত করার জন্য দেখুন।

  • মডেল এবং ভিউ উভয়ই প্রায়শই স্ট্যান্ডার্ড অংশগুলির সুবিধা নিতে পারে: মডেলের জন্য অ্যারে, মানচিত্র, সেট, স্ট্রিং এবং অন্যান্য ডেটা ধারক; দেখার জন্য বোতাম, নিয়ন্ত্রণ, পাঠ্য ক্ষেত্র, চিত্রের দর্শন, সারণী এবং অন্যান্য।


1
ডেস্কটপ অ্যাপ্লিকেশনগুলির জন্য মূল এমভিসি আর্কিটেকচারে, দর্শনগুলি সক্রিয় ক্লাসগুলি ছিল, সরাসরি মডেলটি পর্যবেক্ষণ করে এবং নিয়ামক থেকে সংযোগ বিচ্ছিন্ন।
কেভিন ক্লিন

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

2
@ ডাঙ্ক: ব্যবসায়ের যুক্তিটিকে ইউজার ইন্টারফেস থেকে আলাদা করা অত্যাবশ্যক যাতে ব্যবসায়ের যুক্তি সরাসরি পরীক্ষা করা যায়।
কেভিন ক্রাইনে

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

1
@ ডাঙ্ক: আমি মনে করি আপনি "কন্ট্রোলার" এর মতো যে কোনও কিছু বলতে পারেন, তবে এমভিসি আর্কিটেকচারে, নিয়ামক নির্ভর করে এবং তাই ব্যবহারকারী ইন্টারফেসের অংশ হিসাবে।
কেভিন ক্লাইনে

7

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

মডেল : উপস্থাপন করে এমন তথ্য, যাই হোক না কেন তার মানে পারে
দেখুন : উপস্থাপিত ইউজার ইন্টারফেস যাই হোক না কেন তার মানে পারে
কন্ট্রোলার : উপস্থাপিত আঠালো কারণ যে মডেল এবং যোগাযোগ করার জন্য দেখুন, যাই হোক না কেন তার মানে হতে পারে

এটি অত্যন্ত নমনীয় কারণ এটি একটি সম্পূর্ণ অনেক নির্দিষ্ট করে না। প্রতিটি উপাদানটির অর্থ কী হতে পারে, এগুলির পরিবর্তে নামগুলি কী ব্যবহার করা উচিত, এবং সত্যিকার অর্থে 3 বা 2 বা 4 বা 5 উপাদান থাকা উচিত কিনা তা নিয়ে বিতর্ক করে প্রচুর ব্যান্ডউইথ প্রচুর অপচয় করে তবে এটি বিন্দুটি অনুপস্থিত নির্দিষ্ট ডিগ্রী.

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

এটাই আপনার সত্যিকারের উদ্বিগ্ন হওয়া উচিত।


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

1
"আঠালো" জন্য +1; এর অর্থ এটিও যে এটি একটি অংশ যা স্ক্রিপ্টিং ভাষায় করা সবচেয়ে উপযুক্ত best
ডোনাল ফেলো

পছন্দ করুন "আঠালো" 2 স্বতন্ত্র সত্তাকে একসাথে প্রচুর নমনীয়তার প্রয়োজন যা দুর্বলভাবে স্ক্রিপ্টিং ভাষা (যেমন জাভাস্ক্রিপ্ট) টাইপ করে প্রচার করে
জ্যাক ম্যাকোবার

4

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

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

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

কী এবং কোথায় => নিয়ন্ত্রক কীভাবে এবং কখন => মডেল এবং দর্শন

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


2

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

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


2

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

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


1

ডকুমেন্ট-ভিউ (অর্থাত্ মডেল ভিউ) এমফিসিতে লিখিত বেশিরভাগ উইন্ডোজ অ্যাপের মানক মডেল তাই এটি অবশ্যই অনেক ক্ষেত্রে কাজ করে।


1

আমি মডেলটির ভূমিকা এবং মডেল-ভিউ-কন্ট্রোলার প্যাটার্নটিতে বুঝতে পারি তবে কেন নিয়ামক প্রয়োজনীয় তা বুঝতে আমার খুব কষ্ট হয়েছে।

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

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

যদি আপনি মডেল উপস্থাপনের সাথে ইনপুট মিশ্রিত করেন তবে আপনি সেই ক্ষমতাটি হারাবেন। হঠাৎ দাবা দাবা নয়, এটি একটি মাউসযুক্ত দাবা যা একটি কীবোর্ড বা নেটওয়ার্ক সংযোগের সাথে দাবা থেকে আলাদা।


0

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

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

আইএমও সবকিছুই একটি দৃ API় এপিআই হওয়া উচিত। আসলে এগুলি শক্ত হওয়ার দরকার নেই (যেমন পরিষ্কার এবং ভালভাবে নির্মিত) তবে এর অভ্যন্তরগুলি ব্যক্তিগত থাকা উচিত এবং অ্যাপের / অ্যাপ্লিকেশনটির / এফআই এর বাইরের অংশটি কখনই ডাটাবেস সংযোগ বলতে না পারে বা কাঁচা প্রশ্ন তৈরি করতে সক্ষম হয় না able

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


আপনি আপনার মতামত স্বাগত জানালেন, কিন্তু এই উত্তরটি ওপি'র প্রশ্নের সমাধান করার চেষ্টা করে না।
কালেব

0

এমন একটি ব্রাউজারের কথা চিন্তা করুন যা কোনও স্থির ওয়েব পৃষ্ঠা প্রদর্শন করে। মডেলটি এইচটিএমএল। দৃশ্যটি পর্দার আসল ফলাফল।

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

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

কন্ট্রোলার ইভেন্টগুলিতে প্রতিক্রিয়া জানায় এবং মডেলটিতে কী রয়েছে এবং তাই স্ক্রিন / ভিউতে কী রয়েছে তা নিয়ন্ত্রণ করে।

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

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

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


-2

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

গ্যাং-অফ-ফোর বইটি বলে:

স্মলটাক এমভিসিতে নকশার প্যাটার্নস

ক্লাসের মডেল / ভিউ / কন্ট্রোলার (এমভিসি) ত্রিভাড়া [কেপি ৮৮] স্মার্টটাক -৮০ এ ইউজার ইন্টারফেস তৈরি করতে ব্যবহৃত হয়। এমভিসির অভ্যন্তরে নকশার নিদর্শনগুলি দেখার জন্য আপনাকে "প্যাটার্ন" শব্দটি বলতে কী বোঝায় তা বুঝতে সহায়তা করা উচিত।

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

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

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

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

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

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

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

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

ভিউ-কন্ট্রোলার সম্পর্ক কৌশল (315) ডিজাইন প্যাটার্নের একটি উদাহরণ। কৌশল হ'ল একটি বস্তু যা একটি অ্যালগরিদমকে উপস্থাপন করে। আপনি যখন অ্যালগোরিদমকে স্থিতিশীলভাবে বা গতিশীলভাবে প্রতিস্থাপন করতে চান যখন আপনার অ্যালগরিদমের অনেকগুলি রূপ রয়েছে বা যখন অ্যালগরিদমটিতে জটিল ডেটা কাঠামো থাকে যা আপনি এনক্যাপসুলেট করতে চান তা কার্যকর হয়।

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


1
দেখে মনে হচ্ছে এই পুরো পোস্টটি বিয়োগের প্রথম দুটি অনুচ্ছেদে নকশা প্যাটার্নগুলি থেকে ভারব্যাটিম নেওয়া হয়েছে । আমি এই বিভাগটি একটি উদ্ধৃতি হিসাবে ফর্ম্যাট করেছি যাতে পাঠকরা বুঝতে পারেন - দয়া করে আমি সম্পাদনা করুন যদি আপনার নিজস্ব অনুচ্ছেদগুলি উদ্ধৃত করা হয়।
কালেব

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

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