দ্রষ্টব্য: রবার্ট সি মার্টিন (ওরফে আঙ্কেল বব) তার মূল বক্তব্য, আর্কিটেকচার দ্য লস্ট ইয়ার্স-এ এটি আরও ভাল এবং হাস্যকর উপায়ে ব্যাখ্যা করেছেন । কিছুটা লম্বা তবে প্রচুর ভাল ধারণা শেখায়।
tl; dr: আপনার অ্যাপ্লিকেশনটিকে এমভিসির ক্ষেত্রে বিবেচনা এবং পরিকল্পনা করবেন না। এমভিসি কাঠামো কেবল একটি বাস্তবায়ন বিশদ।
এমভিসি সম্পর্কে সবচেয়ে বিভ্রান্তিকর বিষয় হ'ল, বিকাশকারীরা সমস্ত উপাদান একসাথে আটকানোর চেষ্টা করে।
কাঠামোর শর্তে নয়, কোনও প্রোগ্রামের শর্তে চিন্তা করার চেষ্টা করুন।
আপনার প্রোগ্রামটির একটি উদ্দেশ্য রয়েছে। এটি কিছু ডেটা নেয়, ডেটা দিয়ে জিনিস করে এবং কিছু ডেটা দেয়।
এইভাবে, controller
আপনার প্রোগ্রামের বিতরণ প্রক্রিয়া mechanism
- একজন ব্যবহারকারী আপনার প্রোগ্রামে একটি অনুরোধ প্রেরণ করে (আসুন বলে নেওয়া যাক, শপিং কার্টে একটি পণ্য যুক্ত করুন)।
- নিয়ামক সেই অনুরোধটি (পণ্যের তথ্য এবং ব্যবহারকারীর তথ্য) নেয়, এটি আপনার প্রোগ্রামের প্রয়োজনীয় অংশকে কল করে যা এই অনুরোধটি পরিচালনা করবে
$user->addToCart($product)
- আপনার প্রোগ্রাম ( এই ক্ষেত্রে অবজেক্টের
addToCart
ক্রিয়াকলাপ user
) তার কাজটি করা কাজটি করে এবং একটি প্রতিক্রিয়া ফিরিয়ে দেয় (আসুন বলি success
)
- নিয়ামক প্রাসঙ্গিক ব্যবহার করে প্রতিক্রিয়া প্রস্তুত করে
view
: যেমন। নিয়ামক বস্তুতে$this->render($cartView('success')
এইভাবে, কন্ট্রোলারগুলি প্রোগ্রাম থেকে ডিকপলড হয় এবং ডেলিভারি প্রক্রিয়া হিসাবে ব্যবহৃত হয়। আপনার প্রোগ্রামটি কীভাবে কাজ করে তা তারা জানে না, অনুরোধের জন্য প্রোগ্রামটির কোন অংশটি কল করা দরকার তা তারা কেবল জানে।
আপনি যদি অন্য কাঠামো ব্যবহার করতে চান তবে আপনার অ্যাপ্লিকেশনটির পরিবর্তনের প্রয়োজন হবে না, অনুরোধের জন্য আপনার প্রোগ্রামটি কল করার জন্য আপনাকে কেবল প্রাসঙ্গিক কন্ট্রোলার লিখতে হবে।
অথবা আপনি যদি কোনও ডেস্কটপ সংস্করণ বানাতে চান তবে আপনার অ্যাপ্লিকেশনটি একই থাকবে, আপনার কেবল বিতরণ প্রক্রিয়া প্রস্তুত করতে হবে।
এবং Model
। এটি একটি অধ্যবসায় প্রক্রিয়া হিসাবে ভাবেন।
ওও উপায়ে, আপনার প্রোগ্রামে এমন কিছু জিনিস রয়েছে যা ডেটা ধরে রাখে।
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
আপনি শপিং কার্ট একটি পণ্য যোগ করেন, তখন আপনি যোগ করতে পারেন product::id
থেকে user::shoppingCart
।
এবং যখন আপনি ডেটা অবিরাম রাখতে চান, তখন আপনি model
কাঠামোর অংশটি ব্যবহার করতে পারেন , যা সাধারণত একটি ORM ব্যবহার করে থাকে, ডাটাবেস সারণিতে ক্লাসগুলি মানচিত্র করতে।
আপনি যে ওআরএম ব্যবহার করেন তা পরিবর্তন করতে চাইলে আপনার প্রোগ্রামটি একই থাকবে, কেবল ম্যাপিংয়ের তথ্যই বদলে যাবে। অথবা আপনি যদি ডেটাবেসগুলি একসাথে এড়াতে চান তবে আপনি কেবল প্লেইন পাঠ্য ফাইলগুলিতে ডেটা লিখতে পারেন এবং আপনার অ্যাপ্লিকেশনটি একই থাকবে।
সুতরাং, আপনার প্রোগ্রামটি প্রথমে লিখুন। আপনি যদি 'ওও' উপায়ে প্রোগ্রামিং করে থাকেন তবে ভাষার সাধারণ পুরানো সামগ্রী ব্যবহার করুন। প্রথমে এমভিসির শর্তে ভাবেন না।