# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  پیاده سازی Model-View-Controller در جاوا

## kobari

الگوی طراحی MVC چیست و چه موقع  و در چه نوع اپلیکیشنهایی باید از آن استفاده کرد؟

----------


## zer0cool

http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html

----------


## persianshadow

همیشه می تونی استفاده کنی.

MVC یعنی این که برنامه شما به سه لایه تقسیم بشه.لایه نمایش ، لایه داده ، لایه رخداد و کنترل

که خب واضح هم هست تویه کدنویسی هم باید تا جای که می تونی طوری برنامه رو طراحی 

کرده باشی که این بخش ها از هم جدا باشه.همین !

----------


## javaphantom

> همیشه می تونی استفاده کنی.
> 
> MVC یعنی این که برنامه شما به سه لایه تقسیم بشه.لایه نمایش ، لایه داده ، لایه رخداد و کنترل
> 
> که خب واضح هم هست تویه کدنویسی هم باید تا جای که می تونی طوری برنامه رو طراحی 
> 
> کرده باشی که این بخش ها از هم جدا باشه.همین !


چقدر زیبا و حرفه ای جواب دادید. مشخص که همیشه شما این سه لایه را درست می کنید.
فقط من چون سواد کمی دارم و بسیار کم تجربه هستم می خواهم از شما خواهش کنم که ابهامات من رو اگر که ممکنه رفع کنید.
من بسیار کنجکاو هستم و دوستدارم بیشتر یاد بگیرم.
من در جایی خوندم که MVC یک pattern است که در زبان  small talk برای اولین بار این pattern پیاده ساز شده حالا خود pattern چی هست و چه مزیتهایی دارد بماند.
در ادامه در جایی دیگر خوندم که pattern های بر اساس سه مفهوم اصلی تعریف می شن که عبارتند از
ا. موضوعات و مسائل بوجود آمده و ارتباطات و مفهایم بین موضوعات (صورت مسئله)
۲. مشکل یا مشکلات
۳. راه حل یا راه حلهای مناسب برای حل مشکل یا مشکلات
و همچنین در همانجا به مزیت pattern ها چینن اشاره کرده بود
۱. از تکرار یک راه حل مناست برای یک موضوع خود داری می کنه چون راه حل پیشنهاد شده برای اون موضوع جواب می ده
۲.می شود هر چند بار که به موضوع یا مشکل ایجاد شده برخورد کردیم از آن ا ستفاده کنیم
۳.می توان از چند pattern که کنار هم هستند یک pattern جدید درست کنیم.
جالبی کار اینکه خود pattern ها در مراحل گوناگون روند ساخت خود به دسته های دیگر تقسیم می شوند مثلا هنگام طراحی-هنگام معمار-هنگامی ساخت هنگام آنالیز وووو.
اما جالب اینکه در کتاب دیگری با pattern MVC یا همان Model-View-Controller مواجه شدم. خوب خیلی سخت توضیح داده بود نزدیک به چند صفحه می شد که آخرشم ما نفهمیدیم داستانش چیه خوب معلومه همانطور که شما اشاره کرده اید سه لایه داره دیگه هر موقع می خواهیم می تونیم استفاده کنیم که خوب از همین جا معلوم می که اصل اول pattern ها هم مزخرف نوشته که باید حتما موضوع مربوطه و مشکلی باشه که بریم سراغ راه حل به قول شما آدم خوبه از همون اول سه قسمت بکنه که دیگه خیالش راحت باشه چون کار خوبی هست سواب هم تازه من فکر کنم داره.
اما خوب از اونجایی که من یک چیزهایی فهمیدم می شه اینطوری تعریف کرد

MVC Pattern(Model-View-Controller)

هدف از استفاده از این pattern برای جدا سازی user interface  از interface business می باشد.
 interface business چیست؟ قسمتی از کل یک سیستم که تمام الگورتمهای بصورت یک یا چند function پیاده ساز شده و قرار است بر اساس ورودی ها داده شده کار های عملیاتی را انجام دهد مانند چک کردن موجودی حساب بانکی یک شخص
user interface  چیست؟ واسته ای است که در اختیار کاربر قرار می گیره که کاربر از طریق این واسطه یا همان interface می تواند با قسمت business ارتباط برقرار کنه. مانند یک JFrame با تمام مخلفاتی که برای آن در نظر می گیرند.
مزیت این جداساز ی این است که با تغیر دادن بروی قسمت logic سیستم دیگر نیازی نیست که تغییرات روی کارهای عملیاتی سیستم صورت بگیرد.
با دانستن این مطلب به سراغ تعریف کردن view می روم:
همگی با این قسمت آشنایی داریم تمام user interface هایی که می سازیم که در بالاهم به آن اشاره کردم شامل این قسمت از یک سیستم می شود. فرم ثبت نام که می تواند مثلا در یک jframe باشد یا در یک web browser
Controller که همان قسمت عملیاتی ما می باشد که دادهای وارد شده از طرف view را گرفته و بر روی آن عملیات خواسته شده را انجام و مدیریت می کند. رابطه آن با قسمت view یک رابطه دو طرفه است. 
Model
قسمتی از کل یک سیستم که بصورت یک پارچه عمل می کنه که می تونه برای خودش یک استقلال خاص داشته باشه مانند یک database که خاصیت integrate  بود را دارا است.
که باز این قسمت با قسمت controller رابطه دو طرفه دارد و دو قسمت View , Model از طریق controller بایکدیگر بصورت غیر مستقیم ارتباط بر قرار می کنند. همانطور که گفته شده جدا کردن این قسمت ها هنگام تغییرات بر روی هر قسمت را بصورت مستقل آسان می کند.

مثال:
کامپونت Jbutton را در نظر بگیرد در swing ها . دارای یک شکل و قیافه ای می باشد. (view)
عملیات click کردن و ایجاد یک action و اجرای یک سری فرامین (controller)
تغییر در قسمتی دیگر مثلا مشاهده کردن یک سری اطلاعات یا تغییر رنگ صفحه یا خود دکمه(modle)

در دنیای وب می توان به این شکل تقسیم بندی کرد.
browser برای کاربر که همان (view)
قسمت سروی که عمل پردازش را انجام می دهد که از طریق function های نوشته شده است
که همان (controller) می باشد
database که همان (model) است.

صحبت از لایه کردید بسیار جالب بود. در همان کتاب کلی باز از لایه صحبت کرده بود خوب زیاد گفته بود شما خیلی کاملتر و خلاصه به از آن نام بردید حتما کفایت می کنه.
اما چیزی که من فهمیدم از لایه که در کتابی دیگر خوندم
لایه همان قسمت هایی از کل سیستم می باشد که ما آنها را تفکیک کردیم و بصورت فیزیکی و منطقی می باشند

در مثال اول لایه ها بصورت منطقی تعریف شده بود
در مثال دوم لایه های بصورت فیزیکی تعریف شده بود
 نکته تعداد لایه های فیزیکی نمی تواند بیشتر از تعداد لایه ها ی منطقی باشد.
باشروع این بحث به سراغ معمار N Tier می شه رفت که اگر کسی باز علاقه داشت من بیشتر این بحث رو باز می کنم و طرفندها و مزیت و چگونگی ساخت این لایه ها بیشتر توضیح می دم.
از دوست عزیز جناب آقای persianshadow که استاد من هستن بسیار تشکر می کنم و خسته نباشید می گم.
این چیزهایی که من الان در موردشون صحبت کردم بسیار ناقص هستند و شایدم زیادی ولی خوب احساس کردم که بنویسم بلکه بقیه بیان کاملش کنند یا ناقص تر
چاکس

----------

