سلام ، همه به خوبی از این مهم آگاهی داریم که یکی از جهش های بزرگ AS3 برنامه نویسی شئ گرا برای پلتفرم فلش است . همه بارها نام برنامه نویسی شئ گرا ((Object-Oriented Programming را شندیده ایم . این قابلیت عنوان جدیدی نیست اما چیزی که این میان کمتر به چشم میخورد استفاده واقعا عملی از برنامه نویسی شی گرا است . برنامه نویس شی گرا همواره برای بسیاری از برنامه نویسان مشکلات خاص خود را به دنبال داشته مانند سر و کل زدن با انواع کلاس ها ، متغیر های محلی ، حفاظت از دادها و یا مفاهیمی مانند وراثت که در نظر راحت و در عمل پیاده سازی دشواری دارند . من هم مانند هر برنامه نویسی با این مشکلات سر و کار داشته ام و همواره برایم سوال بوده که برنامه های بزرگ و یا حتی برنامه های کوچکی که خیلی خوب کار میکنند چه روندی در پیش میگیرند که این مشکلات را ندارند یا این مشکلات در برنامه های آنها حداقل است .
Design Pattern یا مفهوم طراحی نرم افزار به ما کمک میکند با مرحله مرحله و گام به گام کردن روند برنامه نویسی در وقت و هزینه خطایابی ونگهداری به طور قابل ملاحظه ای صرفه جویی کنیم . برای من قبل از این اصلا طراحی برنامه مفهوم خاصی نداشت و عملا هیچ وقت از آن استفاده نمی کردم و علاقه ای هم به این کار نداشته ام . گمان من این بود که Design Pattern برای برنامه های سازمانی یا بزرگ مقیاس عملا کاربرد دارد و برنامه های کوچکی که ما مینویسیم بدون توجه به این مفهوم هم به خوبی کار میکند . اما من اعتراف می کنم که اشتباه می کردم . Design Pattern شاید در مرحله اول یک چیز دست و پا گیر و کار اضافی در نظر جلوه کند ! . اما هر چقدر در طراحی نرم افزار جلو تر می روید متوجه خواهید شد که به طور بسیار قابل ملاحظه ای در وقت خود صرفه جویی کردید . مزایای استفاده از Design Pattern عبارتند از : صرفه جویی در کل زمان پیاده سازی پروژه – ساخت یافته تر (Clean) بودن کد تولیدی – خطایابی راحت تر و … .
با توجه به مطالبی که گفته ام امروز می خواهم یک مدل طراحی نرم افزار خوب را برای برنامه نویسان خصوصا برنامه نویسان Action Script 3 معرفی کنم . البته به صورت مختصر ولی مفید که انشا الله در آینده به تفصیل مقالاتی در این باب خواهیم داشت .

MVC (Model – View – Control) Design Pattern
مدل طراحی نرم افزار ، MVC ، که سرنام سه کلمه مدل ، دیدگاه و کنترل می باشد به ما می گوید ای دوست برنامه نویس برنامه را به سه بخش تقسیم کن .
۱ – Model مدل : این بخشی از برنامه است که داده ها را نگه می دارد و داده ها در آن واقع می شوند مثلا شما یک گالری عکس را در نظر بگیرید . برنامه نویس Action Script اگر بخواهید این برنامه را بر پایه XML بنویسد . بخش دادهای XML ما همان بخش Model محسوب می شود که اطلاعات مربوط به عکس را نگهداری میکند .
۲- View دیدگاه : به طور خلاصه بخشی از برنامه ماست که کاربر آن را ملاحظه میکند . خروجی نهایی برنامه بر روی مانیتور را این بخش از کد برنامه ما مدیریت میکند .
۳- Control کنترل : بخشی از برنامه که کنترل برنامه را به عهده دارد . این بخش از کاربر یا از برنامه دستورات لازم را می گیرد و به واسطه آن داد ها و دیدگاه ما را کنترل میکند . برای مثال در گالری عکس دکمه Next و وظایف مربوط به آن در این بخش برنامه می گنجد .
خوب حالا با سه بخش بالا آشنا شدید اما نحوه کار به چه شکل است . بیایید مثال گالری عکس Xml را بررسی کنیم . در این مثال کاربر بر روی دکمه Next کلیک میکند و Event کلیک اتفاق می افتد . بخش Control وارد عمل می شود و بررسی میکند عمل کلیک چه درخواستی دارد . در اینجا عمل کلیک میخواهد که عکس بعدی بر روی نمایشگر نمایش داده شود . کنترل این موضوع را به Model اطلاع میدهد و داده مورد نظر را طلب میکند Model عمل DispatchEvent را انجام داده و عکس را به View میفرستد تا View آن را آماده نمایش کند . به همین راحتی .
مدل طراحی MVC از پر کاربرد ترین مدل های برنامه نویسی در بین برنامه نویسان جهان است . این مدل برنامه نویسی در Action Script 3 ، سایت ها و نرم افزار هایی که مبتنی بر آن تولید می شوند کاربرد وسیعی دارد . امروز بدون استفاده از Design Pattern عملا سایت شما کند و با اشکالات فراوانی رو به رو مشود و اگر اینها که گفتم نشود حتما روند تولید مشکل تر خواهد شد . در مدل MVC ابتدا باید دادها و بخش Model سامان داده شوند پس از این مرحله View و کدهای مربوط به آن تولید خواهد شد و در نهایت برنامه نویس به تولید کد های بخش کنترل دست خواهد زد . این مدل از قابلیت های برنامه نویس شی گرا به خوبی بهره خواهد برد و بخش های مختلف برنامه مانند چرخ دند، درگیر خواهند شد . شاید در آیند فرصتی دست بزند و آموزش این مدل از طراحی نرم افزار را با هم و عملا با تولید یک نرم افزار از ابتدا دنبال کنیم . اگر در این مورد علاقه مند شدید میتوانید به آموزش برنامه نویسی شئ گرا برای فلش از شرکت Lynda و در تکمیل این دانش از کتاب بسیار شاز و نادر Action Script 3 : Design Pattern از انتشارات Oreilly بهره ببرید .
در ۰۲ خرداد ماه سال ۱۳۸۹
سلام دوست عزیز
از اینکه میبینم یک مطلب فارسی در مورد MVC Design Pattern به صورت تخصصی (در مورد اکشن اسکریپت) نوشته شده خیلی خوشحالم.
بحث رو خیلی شفاف و ساده و قابل فهم بیان کردی و این خیلی عالیه.
من برنامه نویس سی شارپ هستم و واسه برنامه های تحت وب (ASP.Net)از MVC استفاده می کنم.
میخواستم از بابت این مطلب ازت تشکر کنم و بگم خسته نباشی دوست عزیز.
موفق باشی
خدا نگهدار
در ۰۲ آبان ماه سال ۱۳۸۹
سلام
من تازه برنامه نویسی تحت وب را با php شروع کرده ام و مطلبت خیلی بهم کمک کرد.
دمت گرم
در ۱۴ آبان ماه سال ۱۳۸۹
دوست عزیز عالی بود
در ۱۰ آذر ماه سال ۱۳۸۹
فوق العاده بود واقعا استفاده کردم
در ۱۰ آذر ماه سال ۱۳۸۹
ممنون از لطف شما و خوشحالم که برای شما مفید ، واقع شد .
در ۱۴ آذر ماه سال ۱۳۸۹
من قراره در مورد MVC واسه درس مهندسی نرم افزار یه سمینار بدم می تونید در این زمینه به من کمک کنید. ممنون می شم
در ۱۶ آذر ماه سال ۱۳۸۹
آقا من با چه زبون بگم دستت درد نکنه؟
در ۱۶ آذر ماه سال ۱۳۸۹
آقا مجتبی ممنون از لطف شما .
واقعا خوشحال شدم که مطلب تنوسته مفید باشه برای شما در حالی که ۲۰ دقیقه به ۲ نیم شب است .
در ۱۶ آذر ماه سال ۱۳۸۹
من بی صبرانه منتظره پیاده سازی این مدل به صورت عملی خواهم بود
در ۱۶ آذر ماه سال ۱۳۸۹
انقدر مطالبتون برام جالبه که خوابو فراموش کردم مهدی جان
مثل یه استاد تو زندگیم قبولت خواهم داشت
در ۰۴ اسفند ماه سال ۱۳۸۹
salam
vaghean mer30
در ۱۸ اسفند ماه سال ۱۳۸۹
با سلام
من این مطلب و خوندم و باید بگم سراسر اشتباه داره که در نکات زیر بیان می کنم:
۱- mvc برای برنامه نویسی سیستم هایی کاربرد داره که کار با دیتا بیس زیادی دارند اونم برای زبانهای open source مثل php .
2- اولین نکته که باید بدونید ارتباط ۳ قسمت:
controller با view و model ارتباط دارد و view با model ارتباط مسقیم ندارند.
که در بند ۳ مطلب بالا گفته شده “Model عمل DispatchEvent را انجام داده و عکس را به View میفرستد” که کاملا اشتباه است.
۳- اکثر درخواست های کاربر توسط خود controller انجام و نتیجه به view پاس داده می شود و از model تنها در کارهای خاصی مثل ارتباط با پایگاه داده و یا تعیین سطح دسترسی کاربران و یا گرفتن گزارشی خاص از سیستم استفاده می شود(به زبان ساده هر کاری رو به model پاس نمیدن چون سربار سرور زیاد و سرعت کم می شه مثلا login کردن خود userController انجام میده و اصلا model برای اینکار تعریف نمشه)
در آخر برای کسانی که علاقه دارند یه نمونه واقعی ببینن که البته ایرانی ها فقط کپی می کنن و بعید می دونم بتونین گسترشی در این کد بدین ولی باز من لینک و قرار می دم واسه اونا که داشتن خودکشی می کردن:
http://www.tonymarston.net/php-mysql/model-view-controller.html
در ۱۸ اسفند ماه سال ۱۳۸۹
ممنون از نظراتی که دارید . ضمن اینکه کاملا از نوشته خودم دفاع نمی کنم . اما در وجاهت حرف های شما هم تردید هست . تمام این مواردی که فرمودید ، ضمن اینکه نه تایید ، نه رد می کنم ، تا حد بسیار زیادی بستگی به نحوه نگرش کاربر و استفاده آن از مدل برای پیاده سازی و توسعه نرم افزار دارد .
اما در مورد این جمله که گفتید “ایرانی ها فقط کپی می کنند ” ، کاملا با نظر شما مخالفم . اگر فرآیند کپی کردن و تولید کردن را دو فرآیند جدا از هم در نظر بگیریم ، تقریبا نسبت این افراد در کل جهان نرخ ثابتی است و ربطی چندانی به جغرافیا ندارد . بیشتر به قوانین مرتبط است تا اقلیم .
در ۱۸ اسفند ماه سال ۱۳۸۹
در مورد حرفهای من هیچ تردیدی نداشته باش اگه نمی خوای لج بازی بچه گانه باعث عقب موندگیت بشه، چون تجربه و علمم تو زمینه تولید نرم افزار اندازه سن شما می رسه. کلی سایت معتبر هم تو اینترنت موجود که اگه یه کلاس زبان خوب بری می تونی از این سایت ها استفاده کنی.
اون لینکی که گذاشته بودم خیلی شفاف راجع به mvc توضیح داده نمی دونم شکت کجاست؟؟؟
می تونی از راهنمای فریمورکهایی که mvc رو ساپرت می کنن مثل yii و symfony و zend و … استفاده کنی نمونه کد ها رو ببینی و با ساختار mvc آشنا بشی.
این خیلی زمان بره خودم به شخصه زمانی این کارو شروع کردم که شما تو ایران هنوز اسم mvc هم به گوشتون نخورده بود.
الان هم خودم یه فریمورک با base ، mvc واسه خودم نوشتم که کشملا داینامیک برنامه ها رو با پترن mvc پیاده سازی می کنه.
در مورد ایرانی ها هم بگم که اگه کپی کار نبودن اینجوری نمشد که کلی فریمورک و برنامه open source تو دنیا وجود داره و سراسر دنیا دست به دست هم دارن رو توسعه شون کار می کنن ولی تو ایران بعد از جوملا و وردپرس دیگه پیشرفتی ایجاد نشد اونم که در سطح قالب و ماژولهای سادست. چون ایرانی ها راحت طلبن فقط به پول فکر می کنن اونا ۲ ریال. حاضرا سایت ۵۰ هزار تونی با جوملا بسازن تا ۴ تا تکنیک یاد بگیرن و خدا نکرده یه ابداع و خلاقیتی داشته باشن.
در ۱۸ اسفند ماه سال ۱۳۸۹
راستی راجع به این جملت هم توضیح بده “نحوه نگرش کاربر و استفاده آن از مدل برای پیاده سازی و توسعه نرم افزار”؟؟؟!!!!!!!!!!!
این یعنی چی؟؟؟
mvc یه مدل استاندارد در تمام زبان ها و الگو ها هم با یک مفهوم مشترک پیاده سازی می شه اصلا دلیل بوجود اومدن mvc ایجاد سازگاری بیشتر تو با این حرفت کل قضیه رو بردی زیر سوال که؟؟؟
عین شیخا جواب سر بالا دادی(وقتی بحث تخصصی راه می ندازی جواب تخصصی بده، به بهبه و چهچه ۴ نفر هم دل خوش نکن، دوست تو کسی که ایراد کار تو می گه چون باعث پیشرفتت وی شه و دشمنت اونی که بیهوده تعریف می کنه و باعث می شه فقط درجا بزنی.)
در ۱۸ اسفند ماه سال ۱۳۸۹
دوست من ، آقای افشین
بنده قصد جدل و بحث علمی با شما که در دنیای نرم افزار طبق گفته خودتان به اندازه سن بنده تجربه دارید را ندارم . اما برای نمونه و بر طبق دانش ضعیفی که دارم اولین مورد از اشکالاتی را که مطرح کردید پاسخ می گویم
“- mvc برای برنامه نویسی سیستم هایی کاربرد داره که کار با دیتا بیس زیادی دارند اونم برای زبانهای open source مثل php .”
مدل توسعه برنامه mvc علاوه بر اینکه در سیستم های کد باز کاربرد فراوانی دارد ، اما به هیچ عنوان ارتباطی به باز بودن و بسته بودن کد زبان برنامه نویسی ندارد . دوستانی دارم که در .net برنامه هایی را با این مدل توسعه می دهند . همچنین در خود فلش پلتفرم که یک سیستم چندان باز هم نیست ، مدل mvc کاربرد دارد . در مورد سایر زبان ها و پلتفرم ها به وضوح معماری پر کاربرد mvc را خواهید دید .
اصولا نگرش شما به مدل توسعه برنامه و محدود کردن آن به پلتفرم های کد باز ، نشان گر عدم درک صحیح شما از design Pattern و مفاهیم سطح بالای مهندسی نرم افزار است .
در ۱۸ اسفند ماه سال ۱۳۸۹
اگر قصد بحث علمی یا همون بحث طلبگی خودمون رو دارید ، بهتر است ادبیات بهتری را به کار ببرید . نوع موضع گیری شما نشان از عدم پختگی کلام دارد . با این حال و ضمن احترام به تمام مواضع شما ، حقیر از نظر زمانی در بحث با شما محدودیت دارم . همین که این مکان را در طرح نظرات خودتان ، دارای وجاهت دیدید ، از شما سپاسگذارم .
در ۲۸ اسفند ماه سال ۱۳۸۹
مطلب بسیار جالبی بود ، به شخصه با این مدل طراحی آشنا نبودم … با تشکر از آقای خدادادی ،باید عرض کنم که افشین جان هم اطلاعات بسیار خوبی ارائه کردند ، شما اگه یه فروم هم بزارید خوب میشه
در ۰۵ فروردین ماه سال ۱۳۹۰
با سلام خدمت دوستان اینو بگم برای دوستانی که می خوان برنامه ها شون رو براساس مدل MVC طراحی کنند اینکه اگه با بحث شی گرایی آشنا نیستین اصلا به سمت این مدل نرید که نمی دونین از کجا اومد به کجا رفت .حرف های دو دوست عزیزمون رو قبول می کنم و این رو بگم که اگه آقای خدادی دلشون نگیره مقاله شون رو به اونایی که آقا افشین گفتن اصلاح کنندو از آقا افشین هم بگم که همه رو تو یه چشم نبینن و از سخنان خوبشون تو همه جا بزنن و به هر دوتا تون بگم که مغرور کارتون نباشین که مغروریت باعث میشه جلو نرین و خودتون رو بهتر از همه بودونین و اینو بدونین که بعضی وقتا بعضی کسا این مدل ها رو تولید می کنن بحث های شما رو شاید خوندن و کلی خندیدن مثل دوستی تو فیس بوک من که به من گفت بیام و این چیزا رو بنویسم
ببخشید که این نظر رو دیر می نویسم.
در ۰۵ فروردین ماه سال ۱۳۹۰
البته بگم از لینکی که آقا افشین به اون وب سایت دادن ایشون خبردار شدن
در ۰۷ فروردین ماه سال ۱۳۹۰
بنده زمانی که این مقاله را می نوشتم ، اصلا ذهنیت اینکه یک مقاله دقیق مبتنی بر اصول فنی بنویسم ، نداشتم . در آن زمان من تازه با این مدل آشنا شده بودم و قصدم به اشتراک گذاری لذتی بود که تجربه کرده بودم . شاید اگر الان دوباره بنویسم با توجه به زمانی که گذشته ، یک چیز کاملا متفاوتی بشود . حقیر در هیج کجا نگفتم که این مقاله بی اشکال است و به نظر تمام دوستان احترام می گذارم . اما هر چه هست ، تجربه شیرین یک آغاز است و نه بیشتر .
در ۰۹ فروردین ماه سال ۱۳۹۰
ممنون از کمکت
در ۰۹ فروردین ماه سال ۱۳۹۰
ممنون
در ۱۰ آبان ماه سال ۱۳۹۰
http://www.tonymarston.net/php-mysql/model-view-controller.html