وقتی برنامه نویسی را شروع میکنیم از این طرف و آنطرف اسم ها و اصطلاحات زیادی به گوشمان میخورد. بعضی ها را که می شونیم با خودمان می گوییم حالا این خیلی مهم نیست، ضرورتی ندارد بعدا سراغش میروم.
اما مطمئن باشید معماری mvc یکی از این نوع مفاهیم نیست که بگذارید برای بعدا. مخصوصا اگر با php برنامه نویسی میکنید.
معماری اصلا یعنی چه؟
در ساختمان سازی کار یک معمار نقشه کشی و طراحی ساختمان است. در برنامه نویسی هم معماری همین نقش را دارد. یک برنامه ای که قرار است نوشته شود نحوه پیاده سازی آن طراحی میشود.
تعریف معماری mvc
mvc به زبان خاصی وابسته نیست. من چون php کار میکنم با php مثال میزنم.
کد نویسی با php نسبتا راحت است. البته نسبت به بقیه زبانها. هر جور بخواهید می توانید اسم متغیر و ثابت بنویسید
هر جا بخواهید کلاس تعریف کنید و شی بسازید وهرجا دوست داشتید هم به دیتابیس کانکشن بزنید.
همین سادگی و یک جورایی بیقانونی در کدنویسی php باعث شده هر برنامه نویسی برای خودش به یک روشی کد بنویسد.
استفاده از معماری اینجا کمک میکند هم یک نظم خاصی به نحوه کدنویسی ما داده شود هم تغییرات بعدی برای برنامه نویس راحتتر باشد.
بله اگر قرار باشد فقط یک فرم نظرسنجی درست کنید یا یک دفترچه تلفن نیازی به معماری نداشتیم.
اما وقتی یک پروژه فروشگاه بزرگ درست میکنید یا در پروژهای کار می کنید که نیاز به چند دولوپر دارد بدون معماری به دردسر میافتید. بعدا برای کوچکترین تغییر باید عزا بگیرید.
معماری mvc می آید برنامهای که قرار است بنویسیم را به سه بخش مجزا تقسیم می کند. هر قسمت هم یک کار خاص انجام میدهد که از بخش های دیگر جداست. این سه بخش:
- model(مدل)
- view(ویو)
- controller (کنترلر)
وقتی به روش هردنبیلی کد مینویسیم، هرجا دلمان خواست اتصال به دیتابیس ایجاد می کنیم هر جا عشقمان کشید کلاس میسازیم و هرجا فرصت داشتیم یک شی ایجاد میکنیم.
بعدا که قرار باشد یک برنامه نویس دیگر یا حتی خودمان به کد رجوع کنیم و کار را توسعه بدهیم احتمالا باید زمان بیشتری از نوشتن خود این کدها برای ریفکتور کردن یا اصلاح کدها بگذاریم.
روش کار معماری mvc
یک نگاهی بیاندازید وقتی مثلا دارید برنامه تحت وب مینویسید چکار می کنید:
- اول ظاهر برنامه را با html درست میکنید.
- اتصال به دیتابیس برقرار می کنید.
- اگر شیگرایی کد نویسی کنید(همیشه بهتر است این کار را بکنید) چند کلاس می سازید.
- جاهایی که نیاز دارید شی ایجاد میکنید.
- از کاربر داده هایی میگیرید در دیتابیس ذخیره میکنید و همینطور دادههایی که نیاز باشد را به کاربرتان نشان میدهید.
اگر بدون معماری این کارها را انجام بدهید قطعا هر برنامه نویس، کارهایی که گفته شد به علاوه شیوه پوشهبندی، اسمگذاری، ساخت کلاس ها و … را به شکل دلخواه و متفاوتی انجام میدهد.
اما در MVC برای هر کدام از اینها یک بخش جدا وجود دارد:
model فقط کارش ارتباط با دیتابیس است.
view هم در واقع همان ظاهر نهایی است که کاربر میبیند. تمام ظاهر سایت در این قسمت درست میشود.
و در قسمت controller هم همه اطلاعاتی که کاربر وارد می کند یا درخواست هایی که دارد را پردازش میکنید.
به این مثال نگاه کنید:
شما یک فروشگاه اینترنتی دارید به آدرس yourshop.com.
یک نفر که می خواهد وارد فروشگاه شما شود. url را در مرورگر وارد می کند یا روی لینک سایت کلیک می کند.
همینجا یک درخواست یا request به سرور سایت ارسال میشود(در همه سایتها به ازای هر کاری که کاربر در یک صفحه وب انجام می دهد مثل ارسال فرم، کلیک روی لینک، آپلود یا دانلود فایل، یک ریکوئست به سرور سایت زده میشود).
اینجا اتفاقی که پشت پرده فروشگاه شما میافتد این است(البته اگر با معماری mvc آن را برنامه نویسی کرده باشید):
مرحله اول:
کنترلر(controller) این درخواست را نگاه میکند و بررسی میکند که آیا آدرس وارد شده صحیح است یا نه.
خوب واضح است اگر کسی این آدرس که بالا نوشتم را وارد کند باید صفحه اصلی فروشگاه شما را ببیند.
اگر صحیح بود کنترلر به مدل این درخواست را میفرستد تا مدل(model) دادههای مورد نیاز را از دیتابیس دریافت کند.
این دادهها هر چیزی است که شما قرار است در صفحه اصلی فروشگاهتان نشان کاربر بدهید. مثل محصولات پرفروش یا برخی پستهای منتخب و هر چیز دیگر.
مرحله دوم:
مدل با دیتابیس ارتباط برقرار میکند، اطلاعات را میگیرد و برای کنترلر می فرستد.
مرحله سوم:
حالا کنترلر این بار به ویو (view) درخواست را ارسال می کند. view هم ظاهر صفحه مورد نظر را آماده میکند و برای کنترلر میفرستد.
مرحله چهارم:
در نهایت کنترلر محتوایی که از دیتابیس گرفته را با کدهای فرانتاند که از ویو(view) دریافت کرده ترکیب میکند و صفحهی اصلی را به کاربر نشان می دهد.
حتما دقت کردید که اینجا کنترلر همه کاره است. مدل و ویو هیچ وقت مستقیما با هم در ارتباط نیستند. آنها سر جایشان مینشینند تا کنترلر از آنها چیزی بخواهد.
فریمورک mvc
تا اینجا حرف از معماری بود. حالا هر فریمورکی هم که با معماری MVC نوشته شده باشد اسمش میشود فریمورک mvc مثل فریمورک لاراول در php.
آیا باید همیشه با معماری کد بنویسیم؟
این که از چه روشی برای انجام یک پروژه استفاده کنیم به شرایط هر پروژه بستگی دارد، اما یک سری آدم نشستهاند و به الگوهایی برای برنامه نویسی بهتر و منظمتر رسیدهاند. قطعا نوشتن یک پروژه با معماری خیلی راحت تر و سریعتر است.
شاید اولین بار برای یادگیری قلقهای این نوع برنامه نویسی کمی وقتتان بیشتر گرفته شود، اما راحتی کار در اصلاح برنامه و اضافه کردن فیچرهای(feature) مختلف به این زحمت اول کار می ارزد.
حالا شاید بخواهید خودتان یک فریمورک متناسب با کارتان بنویسید یا اینکه از فریمورکهای آماده که جواب خودشان را پس دادهاند استفاده کنید.