# زبان های اسکریپتی > PHP > CodeIgniter >  آموزش Codeigniter بخش اول

## ghasem.fattahpour

در ابتدای امر می خواهیم بررسی درباره معماری mvc مروری داشته باشیم و همچنین دلایل استفاده از آن را مرور نماییم.


*فاجعه ای به نام کد نویسی ماکارونی*
 شاید برنامه نویسانی که از قدیم مشغول فعالیت بودند به خاطر دارند که در پروژه های بزرگی که قبلا (حدود 10 – 15 سال قبل) انجام می گرفت چند مشکلی بزرگ وجود داشت :
 1) انجام عملیات به صورت تیمی مشکلات فراوانی داشت
 2) حل مشکلات سایت مانند خطا ها و... خود نیاز به تعریف پروژه ای جدید به نام حل مشکلات پروژه داشت!
3) تغییر برنامه نویسان و یا عوض شدن اعضای تیم (به دلیل تعویض شدن اعضای تیم برنامه نویسی و تغییر متدولوژی در برنامه نویسی) مساوی بود با فاجعه!
 4) پروژه تقریبا غیر قابل تغییر بود!
 5) ...
 دلیل این مسئله این بود که افراد تیم هرکدام دارای نحوه برنامه نویسی جدا گانهای بودند، ولی ما نیازمند یک تیم واحد بودیم. در واقع ما یک برنامه داشتیم با چند سبک برنامه نویسی چیزی شبیه *ماکارونی*!


*برنامه نویسی شی گرا، راه نجات*
 یکی از راه هایی که باعث شد برنامه نویسی تسهیل شود، فراگیری برنامه نویسی شی گرا بود این مسئله باعث شد که هر کلاس را مانند کپسولی در نظر بگیریم و تنها با در دست گیری ورودی و خروجی آن کلاس (مانند متد ها و پارامترها و ...) شروع به برنامه نویسی بکنیم. این مسئله کار برنامه نویسان را بسیار راحت نمود. اما باز هم نحوه های مختلف برنامه نویسی باعث ایجاد اختلافات عمده ای در  یکپارچه سازی برنامه ها از لحاظ نحوه برنامه نویسی می شد!
 به عنوان مثال بعضی برای وصل شدن به پایگاه داده در یک برنامه از یک کلاس استفاده می کردند و بعضی این ارتباط را در داخل کد (و بدون استفاده از آن کلاس) برقرار می کردند، خود این مسئله مشکلات خاصی را پیش روی برنامه نویسان قرار می داد.


*نیاز های اصلی ما در یک پروژه برنامه نویسی*
 اگر تنها یک پروژه برنامه نویسی ساده انجام داده باشید خواهید فهمید که ما به طور کلی:
 1) نیاز به یک سطح ارتباط با کاربر داریم.
 2) نیاز به سطحی برای بررسی نیاز کاربر و تحلیل و فرآيند هایی بر روی آن هستیم.
 3) به لایه ای برای ارتباط با پایگاه داده و انجام امور مربوط به ذخیره بازیابی و ... بر روی اطلاعات نیاز داریم.


*قسمت های عمده یک معماری*
 اگر به گفته های بالا دقت کرده باشید به این نتیجه می رسیم که ما 3 لایه کلی در برنامه نویسی داریم :


User Interface (UI) – لایه ای که با کاربر در ارتباط می باشد.Business – لایه ای که فرآیندی بر روی اطلاعات آمده از سوی کاربر و یا پایگاه داده انجام می دهد.Data Access – لایه ای که با دیتابیس در ارتباط است.

*معماری* *MODEL – VIEW – CONTROL* * یا* *(MVC)*
 در این معماری در واقع ما دارای ترجمه ای از قسمت های مهم معماری به شکل زیر هستیم:
 
*MODEL** :* وظیفه کار با پایگاه داده را بر عهده دارد.*VIEW** :* وظیفه ارتباط با کاربر نهایی را بر عهده دارد.*Control** :* وظیفه کنترل View  و control و نحوه ارتباط  آن دو را با هم بر عهده دارد.
در این باره باید دقت کنیم که هنگامی که ما یک URL را در این معماری بازدید می کنیم در واقع در حال فراخوانی یک controller هستیم!

----------

