علیرضا حسینی زاده
یه برنامه نویس
مدیر فنی افرافایل
درباره من
معماری MVC چیست؟ ارسال شده در ۰۴ بهمن ۱۳۹۶
سلام
امروز میخوام درباره mvc صحبت کنم و به زبان ساده مفهوم این معماری رو توضیح بدم برای دوستانی که توی درک این داستان یکم مشکل پیدا کردن.
اول باید بگم که mvc یک معماری ساخت نرم افزاره و محدود به هیچ زبان و تکنولوژی نیست و من از همینجا از تمام دوستان asp کار خواهش میکنم واژه mvc رو به جای asp.net mvc به کار نبرن. اینکه asp.net بعدا اومد و از معماری mvc استفاده کرد دلیل نمیشه هرجا بگیم mvc کد زده شده یعنی asp.net mvc کد زدن
خوب بریم سراغ توضیح ساده
درکل mvc مخفف Model Views Controllers هست
یه مثال میزنم بعد میارمش روی یک اپلیکیشن وب
فرض کنید یک رستوران داریم، این رستوران شامل یک فضا برای نشستنه که مشتری ها میان و اونجا روی صندلی ها میشینن، یک آشپزخونه داره که غذاها رو آماده میکنن و یک تعداد گارسون و راهرو داره که ارتباط بین آشپزخونه و مشتری ها رو فراهم میکنن
این رستوران ما میشه گفت از مدل mvc داره استفاده میکنه که اینجا views میشه بخشی که مشتری ها هستن، controllers میشه گارسون ها و model میشه آشپزخونه
حالا تو این مدل مشتری ها از لایه views درخواست هاشون رو به گارسون که لایه controllers هست میدن و گارسون درخواست رو تحلیل میکنه و میبره میده آشپزخونه که لایه model هست و model غذا رو آماده میکنه و دوباره میده به گارسون که لایه controllers باشه و گارسون پاسخ درخواست که اینجا غذاست رو میبره لایه views و تحویل مشتری میده
توی طراحی وب هم همین روال انجام میشه
لایه views همون فرنت اند یا صفحه ظاهری سایته که کاربرا میبینن و وقتی روی دکمه ای کلیک میکنن یا درخواستی میفرستن مثلا درخواست نمایش گالری عکس محصول ارسال کرده میره به لایه controllers و اونجا بررسی میشه و این درخواست ارسال میشه به لایه model و اونجا اطلاعات درخواست شده از دیتابیس دریافت میشن و اطلاعات دوباره ارسال میشن به controller و کنترلر دوباره میفرسته به لایه views که پاسخ درخواست کاربر بوده و گالری عکس محصول رو میبینه
پس متوجه شدیم لایه views همون فرنت اند هست، ظاهر سایت و کدهایی هستن که کاربر میبینه
لایه model کار با دیتابیس رو انجام میده
لایه controller هم رابط بین model و views هست و همچنین عملیات منطقی و کدهای بک اند رو قرار میدیم
شاید سوال بشه اگه از مدل mvc استفاده نکنیم چه شکلی این رخدادها اتفاق میوفتن
به این شکل میشن که کدهای دریافت اطلاعات از دیتابیس بین همون کدهایی قرار میگیره که کاربر میبینه و کدهای عملیات های منطقی هم همونجان
کلا تمام کدها رو یکجا توی یک لایه میشه دید
سوال پیش میاد که این مدل mvc که داره کار رو پیچیده تر میکنه تا آسون تر پس برای چی استفاده کنیم؟
جواب: شاید تو نگاه اول پیچیده تر به نظر بیاد ولی اینطور نیست ساده تره چون شما دنبال هر بخشی از کدها باشین میدونین کجا پیداش کنین مثلا اگه دنبال تغییرات در ظاهر سایت باشین همه توی لایه views هستن اگه بخواین کدهای عملیاتی و منطقی رو تغییر بدین همه توی controller هستن و….
ولی اگه تمام کدها یکجا باشن حجم کدها خیلی بالا میره و شما گیج میشین که چی رو کجا باید پیدا کنین
مزایای استفاده از مدل mvc:
۱- به خاطر اینکه کدهای حساس در لایه متفاوتی هستن امنیت رو بسیار بالاتر میبره مثلا فقط در لایه model امکان دسترسی به دیتابیس وجود داره
۲- آپدیت و تغییرات در آینده بسیار راحت تره چرا که کدهای شما مثل قفسه های کتابخونه دقیق و مشخص جایگذاری شدن و دنبال هرچیزی باشین راحت میتونین پیداش کنید و توی کدهای خودتون گم نشید
۳- کار تیمی خیلی راحت تر انجام میشه مثلا یک نفر که فرنت اند کار هست فقط درگیر کار با لایه views میشه و اصلا کدی از بک اند نمیبینه و راحت تر کارش رو انجام میده
۴- وقتی درخواستی میخواد بین هرکدوم از لایه ها جابجا بشه میتونید یک سری عملیات روی اون درخواست انجام بدین مثلا چک کنید که کسی که درخواست رو فرستاده اجازه ارسال این درخواست رو داره یا نه و… که برای سطح بندی کاربران و مجوزهای مختلف برای امنیت خیلی کاربردی و مهمه
۵- استفاده دوباره از کدها که خیلی مهمه، یعنی مثلا میتونید چند view رو به یک controller وصل کنید یا برعکس و راحت میتونید view های جدید ایجاد کنید بدون اینکه دوباره کدهای بک اند اون رو بنویسین
۶- دیباگ کردن راحت تر کدها، شما میتونید داده ها رو در هرلایه تست کنید و اگر درست بود برای لایه بعد ارسال کنید
فریم ورک هایی که بر پایه mvc هستند:
asp.net که در نسخه جدیدی توسط مایکروسافت به asp.net mvc تغییر پیدا کرد.
php هم چون متن باز هست فریم ورک های زیادی با معماری mvc براش ساخته شده که معروف ترینش laravel هست:
- laravel
- CodeIgniter
- CakePHP
- Zend
- Yii
- ….
python هم فریم های معروفی با معماری mvc داره مثل django و Pyramid
ruby هم با معروف ترین فریم ورکش یعنی ruby on rails با معماری mvc هست.
فریم ورک های جاوا اسکریپت هم با معماری mvc هستند مثل AngularJS
درکل امروزه استفاده نکردن از معماری mvc در طراحی وب یک اشتباه بزرگ حساب میشه
امیدوارم مقاله مفیدی بوده باشه
موفق باشید
برای من که شناختی نداشتم خوب بود ممنون
خواهش میکنم محمدعلی جان
ممنون. خیلی خوب توضیح دادید.
خواهش میکنم
سلام
ممنون میشم یه راهنمای جامع از Spring MVC جاوا معرفی کنید
سپاس