এমভিসি আর্কিটেকচার - আমার কয়টি কন্ট্রোলারের প্রয়োজন?


54

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

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

একক ওয়েব অ্যাপ্লিকেশনটির জন্য কয়টি নিয়ামক প্রয়োজন?

আমি বুঝতে পারি যে এটির উদাহরণ দেওয়া ছাড়া উত্তর দেওয়া শক্ত হবে সুতরাং আমি একটি সরবরাহ করব:

অ্যাপ্লিকেশন:

  1. ব্যবহারকারী লগ ইন
  2. ব্যবহারকারী তিনটি জিনিসের মধ্যে
    একটি করতে পারে: ক) একটি ফাইল আপলোড করুন (মেটা ডেটা সহ একটি মংডোব ডাটাবেসে সঞ্চিত)।
    খ) একটি ফাইল অনুসন্ধান করুন।
    গ) লগ আউট।

আমার প্রশ্নটি একটি সাধারণ, তবে আমি উত্তর দেওয়ার চেষ্টা করা যাকে সাহায্য করার জন্য উদাহরণ দিয়েছি।


8
সত্যিই খুব সুন্দর একটি প্রশ্ন।
ড্যানিয়েল হোলিনরেকে

উত্তর:


34

আপনার উদাহরণের জন্য আমি দুটি নিয়ামক তৈরি করব:

  • লগইন এবং লগআউটের জন্য সেশনস নিয়ন্ত্রক (লেআউটটির মতো পুনর্নির্মাণের জন্য সেশন তৈরি করুন এবং ধ্বংস করুন)
  • ফাইলগুলির প্রতিটি কিছুর জন্য ফাইলগুলি নিয়ন্ত্রক (সূচক = অনুসন্ধান এবং তৈরি = আপলোড)

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

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

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


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

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

6

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

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


5

এটি আপনার অ্যাপ্লিকেশন প্রয়োজন এবং ব্যবসায়িক মডিউলগুলির আর্কিটেকচারের উপর নির্ভর করে।

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

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

সম্পর্কিত অনেকগুলি আলোচনা রয়েছে:


1
দুর্দান্ত রেফারেন্স! আমি অবশ্যই তাদের পরীক্ষা করে দেখব!
জেফ

অবশ্যই, কোনো সমস্যা নেই.
ই এল ইউসুবভ

4

আমি এটি করার পদ্ধতি অ্যাপলের পছন্দ করি।

প্রতিটি দর্শন শুধুমাত্র একটি দর্শন নিয়ামক দ্বারা নিয়ন্ত্রিত হয়। ~ IOS এর জন্য দেখুন কন্ট্রোলার প্রোগ্রামিং গাইড

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


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

মডেলদের ব্যবহারকারীদের নজর রাখা উচিত। সুতরাং একাধিক নিয়ন্ত্রণকারীরা প্রয়োজনে একই মডেল অবজেক্টটি ব্যবহার করতে পারেন।
কোরে হিন্টন

2
সুতরাং একটি নিয়ামকের একটি মডেল অবজেক্ট এবং একটি ভিউ অবজেক্ট থাকে। কন্ট্রোলার মডেল অবজেক্টটিকে তথ্যের জন্য জিজ্ঞাসা করে (ব্যবহারকারীর তথ্যের মতো) এবং তারপরে ভিউ সেট করে। মডেলটির বেশিরভাগ প্রোগ্রামের যুক্তি থাকা উচিত যখন কন্ট্রোলারের কাছে কেবল ভিউ এবং মডেলটির মধ্যে পিছনে পিছনে যোগাযোগ করতে সক্ষম করার জন্য যুক্তি থাকে।
কোরি হিন্টন

2
প্রতিটি দৃশ্যে একজন নিয়ামক হ'ল অত্যন্ত সীমাবদ্ধ ডিজাইন, কারণ আপনার নিয়ামক মডেলটির বিভিন্ন রাজ্যের জন্য বিভিন্ন ভিউ-মডেল প্রদর্শন করতে পারবেন না।
EL Yusubov

1
@ ইলিউসুবভ আমি দেখতে পাচ্ছি যে এটি কোথায় বিভ্রান্তিকর হতে পারে। আইওএসে প্রতিটি দৃশ্যে একটি মাত্র ভিউ কন্ট্রোলার থাকে এবং প্রতিটি ভিউ কন্ট্রোলারের কেবলমাত্র 1 টি সক্রিয় ভিউ থাকে (এবং সেই ভিউতে সাব-ভিউ থাকতে পারে) তবে এই ভিউ কন্ট্রোলারটিতে কোনও সংখ্যক দর্শন সম্পর্কিত রেফারেন্সও থাকতে পারে।
কোরি হিন্টন

2

একটি উদাহরণ যা আমি পছন্দ করি তা হ'ল থার্মোস্টেটের কথা ভাবা। এমভিসি প্যাটার্ন দেখার জন্য একটি থার্মোস্ট্যাট একটি দুর্দান্ত দৃশ্য।


পুরানো ক্ষেত্রে, অ্যানালগ থার্মোস্ট্যাট আপনি এই জাতীয় জিনিসগুলি চিত্রিত করতে পারেন:

দেখুন - তাপমাত্রা পাঠক, যা বর্তমান তাপমাত্রা প্রদর্শন করে।

নিয়ামক - ডায়াল, যেখানে আপনি তাপমাত্রা পরিবর্তন করেন

মডেল - কন্ট্রোলার দ্বারা অভ্যন্তরীণ যে অংশগুলি তাপমাত্রা পরিবর্তনের কারণ হয়ে থাকে।


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

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

শুভকামনা!


1

আমি ধরে নিলাম যে আপনার উদাহরণটি একটি জটিল সিস্টেমে বিকশিত হবে।

অ্যাপ্লিকেশন:

ব্যবহারকারী লগ ইন:

  • LoginController

এর একমাত্র দায়িত্ব লগইনগুলি হ্যান্ডেল করা, ফলাফলটিকে ব্যবহারকারীকে পুনঃ-প্রত্যক্ষ বা অবহিত করা।

একটি ফাইল আপলোড

  • UploadController

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

একটি ফাইল অনুসন্ধান করুন।

  • SearchFileController

এটি একটি মৌলিক প্রয়োজনের জন্য যথেষ্ট। অনুসন্ধান যুক্তিটি কতটা জটিল হয়ে যায় তার উপর নির্ভর করে আপনার পরে একাধিক অনুসন্ধান নিয়ন্ত্রক থাকতে পারে। আপনি যে সর্বশেষ জিনিসটি পেতে চান তা হ'ল একক সার্চ কন্ট্রোলার 20 টি ক্রিয়াকলাপের সাথে বিভিন্ন অনুসন্ধান করে।

প্রস্থান.

-LogoutController

কেউ এটিকে ওভারকিল হিসাবে বিবেচনা করতে পারে, তবে আমি এটি মনে করি না। আমি মনে করি এটি পরিষ্কার এবং সুন্দরভাবে পৃথক হয়েছে।

যদি আমি এই প্রকল্পের কাঠামোটি লক্ষ্য করি তবে আমি তাত্ক্ষণিকভাবে জানতে পারি এটি কী করে এবং কীভাবে এটি কাঠামোগত। এটা এক পা এগিয়ে নিতে হলে, আমি লাগাতে হবে LoginControllerএবং LogoutControllerপৃথক এলাকার মধ্যে।

আমি এর আগে এমন কিছু বিকাশ করেছি এবং এটি সত্যই ভাল কাজ করেছে।


ইনপুট জন্য ধন্যবাদ! কোনও কাজের কোড পেয়েছেন? কিছু জিনিস আটকে যাচ্ছে।
জেফ

আপনি কোন সমস্যায় পড়ছেন?
কোডার্ট

আমি একটি বিষয় এবং তারিখ আপলোড করতে সক্ষম (স্ট্রিং ফর্ম্যাটে) তবে ফাইলটি নিজেই আপলোড করতে পারি না (দেখুন স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 18344614/… )।
জেফ

আমি। নেট বিকাশকারী। দুঃখিত আমি আপনাকে সাহায্য করতে পারি না।
কোডার্ট

1

আপনার কোডটির বেশিরভাগটি ঠিক একটি ব্যবসায়িক স্তরে ঘটছে? যদি এটি হয় তবে আপনার কন্ট্রোলারে আপনি যা করছেন তা সত্যিই তথ্যটিতে ফিরে আসে।

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

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


0

সাধারণভাবে আপনি বলতে পারেন যে প্রতিটি মডেলের নিজস্ব কন্ট্রোলার এবং ডেডিকেটেড ভিউ রয়েছে। জেনারেল বলে আমি বোঝাতে চাই যে এটি সেরা অভ্যাস।

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

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

আমার মতে প্যাটার্ন হিসাবে এমভিসির অন্যতম প্রধান সুবিধা হ'ল এটি মডেল এবং দর্শনগুলি বেঁধে দেওয়ার সর্বোত্তম উপায় সরবরাহ করে।

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


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

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