یک توسعه دهنده وب
معماری MVC که میگن یعنی چی؟
? مقدمه
قبلا رویکرد برنامه نویسی سنتی به این صورت بود:
دریافت داده --> پردازش اطلاعات --> جواب
ولی به مرور زمان و با پیچیده شدن برنامهها دیگه این رویکرد جواب نمیداد. در رویکرد سنتی کدهای فرانت-اند، کدهایی که مسئولیتشون پردازش اطلاعات بود و داده های برنامه، همگی در یک فایل نوشته میشدند که باعث میشد تست پذیری، گسترش و نگهداری برنامه و کدها خیلی سخت بشن. اما با ظهور MVC این مشکلات حل شد. MVC مخفف سه واژه Model, View و Controller هستش. اصلیترین کار MVC جدا کردن مسئولیت بخشها و کم کردن وابستگی بین اونهاست. یعنی بجای اینکه بیایم برنامه رو به روش بالا جدا کنیم، میایم بر اساس نقشی که دارند جداشون میکنیم.
بخش اول دادهها(Data)، بخش دوم پردازش(Logic) و در نهایت بخش سوم ظاهر (UI).
? مدل: Model مهمترین بخش یک برنامه در معماری MVC هستش. مدل ساختار و پایه یک برنامه رو مشخص میکنه. از وظایف مهم مدل میشه به ایجاد ارتباط با پایگاه داده، جواب دادن به درخواست اطلاعات، تغییر در داده های ذخیره شده و حتی نوتیفای کردن آبزرورها در سیستم های رویداد محور، یاد کرد. مدل همچنین در اعتبارسنجی دادهها هم نقش مهمی بازی میکنه. نکته مهم این است که این بخش از اتفاقاتی که در بخش های Controller و View می افتد هیچ اطلاعی ندارد. این بخش به دنبال پاسخ از دیگر بخش ها نیست و معمولا بخش های دیگه به مدل وابستگی مستقیم دارند. در کل میشه وظیفه مدل را به سه قسمت عمده اعتبار سنجی، نگهداری و ویرایش اطلاعات برنامه خلاصه کرد.
? کنترلر: Controller کنترلر مانند یک رابط بین مدل و ویو برنامه هستش. بیشتر تصمیمگیریها و لاجیک نرمافزار در کنترلرهای برنامه اتفاق میفته. این بخش در تعامل با Model و View میتواند جریان اطلاعاتی برنامه رو کنترل کنه. وظایف کنترلر شامل دریافت درخواستها، پردازش اونها و پاسخ دادن بهشون هست. برای مثال وقتی شما روی یک لینک کلیک میکنید، وظیفه کنترلر هستش که تعیین کنه با کلیک رو اون لینک قراره چه اتفاقاتی بیفته و برنامه چه پاسخی بهش بده. کنترلر هستش که تعیین میکنه که یک ویو باید چه مدلی دریافت کنه و به نمایش بزارتش.
?ویو: هر چیزی که یوزرهای برنامه باهاش در ارتباط هستند و تعامل انجام میدند میشه ویو. ویو معمولا نقطه پایانی یک برنامه طلقی میشه. چرا نقطه پایانی؟ چون همیشه دارای نتایج عملیات هستش. برای مثال وقتی شما تو مرورگر اسم سایتی رو وارد میکنید، یک درخواست به کنترلر میدید. اون کنترلر درخواست رو پردازش میکنه و سپس اطلاعات مورد نظرشو از مدل میگیره و در نهایت اطلاعات رو به ویو میده تا نمایش بده. در واقع ویو وظیفش نشون دادن اطلاعاتی هستش که کنترلر از مدل درخواست کرده. به ویو Presentation Layer هم میگند. ویو رو در برنامه های تحت وب با زبان های HTML ، CSS و JS مینویسند. ویو کاری به منطق برنامه نداره و فقط یک Model دریافت می کنه (اونم کنترلر تعیین میکنه چه مدلی دریافت کنه) و اونو به هر شکلی که نیاز باشه به کاربر نشون میده. ویوها نباید لاجیک (منطق) داشته باشن اگر هم داشته باشن باید ساده و مختصر باشه.
?معماری MVC و ساندویچی!!
ُبرای اینکه ساختار MVC خوب براتون جا بیفته یک مثال از ساندویچی میارم. فرض کنید شما (یوزر) میری ساندویچیِ حسین کثیف و منو رو میخونی. اینم منوشون هستش:
شما هوس مرغ کردی، پس پیشخدمت (Controller) رو صدا میزنی و یک ساندویچ مرغِ سه نون با سس اضافه سفارش میدید. پیشخدمت (Controller) میره پشت صندوق و به حسین آقا (Model) میگه که یک ساندویچ مرغ سفارش داده شده.(حسین آقا اهمیت نمیده کی مرغ سفارش داده. اون فقط میدونه که باید یک ساندویچ مرغ درست کنه.) حسین آقا (Model) میره پشت اجاقش جایی که همه چیز اونجا فراهمه. مثل روغن، نون، مرغ، نمک، سوسیس، کره و...
حسین آقا (مدل) بسته به درخواستی که پیشخدمت (کنترلر) از شما (یوزر) دریافت کرده مواد رو باهم میکس میکنه ویک ساندویچ مرغ تحویل پیشخدمت میده. حالا شما ساندویچ خودتو (ویو) رو با تمام محتویات درخواستیت تحویل میگیری از پیشخدمت. تو این مثال ما سه بخش مهم داشتیم:
? اولی: پیشخدمت که همون کنترلر هستش و وظیفش ایجاد ارتباط بین ویو و مدل (مشتری و حسین آقا) هستش.
? دومی: حسین آقا که همون مدل هستش که مسئولیتش نگهداری اطلاعات (مرغ، نون، روغن و...) و تحویل میکس شده اونا به کنترلر هستش. (در واقع نگهداری از مواد اولیه یا همون اطلاعات وظیفه دیتابیس هستش نه حسین آقا که مدله ولی بخاطر پیوستگی مطلب، درباره پایگاهداده صحبت نمیکنم).
? سوم: ساندویچ مرغ یا همون ویو هستش که نتیجه نهایی کار هستش.
این تصویر روشن تر میکنه داستان رو:
با دنبال کردن صفحه اینستاگرام من این مطالب رو به صورت تصویری و یک هفته زودتر دریافت کنید.
مطلبی دیگر از این انتشارات
RESTful API (REST API) چیست ؟
مطلبی دیگر از این انتشارات
چگونه یک تست امنیتی بنویسیم
مطلبی دیگر از این انتشارات
از MySQL تا MongoDB