یکی از معماریهای مهم نرم افزاری معماری MVC یا مدل-ویو-کنترلر (Model-View-Controller) است که در طراحی و ساخت اپلیکیشنها و سرویسهای مختلف مورد استفاده قرار میگیرد. یکی از شاخههای دیگر این سبک معماری MVP یا مدل-ویو-پرزنتر (Model-View-Presenter) که بیشتر برای ساخت رابط کاربری (UI) مورد استفاده قرار میگیرد. در این مدل Presenter به عنوان "مرد میانی" حساب شده و تمام منطق برنامه به Presenter ارسال میشود. در این مطلب قصد داریم شما را با معماری نرم افزاری MVP آشنا کنیم و تفاوت آن را با MVC بیان کنیم، همراه ما باشید.
معماری نرم افزار چیست؟
برنامه نویسان بهتر است وقت خود را روی حل مشکلات و چالشهای جدید بگذارند. متاسفانه بسیاری از مسائل تکراری و غیرضروری در هنگام اجرای پروژه وقت برنامه نویسان را میگیرد. همینطور توسعه و نگهداری نرم افزارهایی که از یک الگو یا معماری خاص پیروی نمیکنند، مشکل است. وجود معماریهای مختلفی مثل MVC، MVP یا MVVP کمک میکنند پیچیدگیهای برنامه تا حد ممکن کم شوند و فرآیند توسعه نرم افزار افزایش پیدا کند. معماری یک نرم افزار به تعریف ساختار بندی کلی سیستم و ارتباط آن با سایر بخشها اشاره دارد. هر معماری شامل الگوهای (Pattern) مختلفی است که با توجه به نوع پیاده سازی نرم افزار انتخاب میشوند. پترن هایی مانند MVP به نوعی زیرشاخه معماری نرم افزار محسوب میشوند. این الگوها مانند یک نقشه راه برای توسعه دهنده عمل میکنند و اجازه نمیدهند که او گرفتار تکرار شود. انتخاب معماری نرم افزاری که قصد پیاده سازی آن را دارید باید به گونه ای باشد که نیازمندیهای فنی و عملیاتی سیستم را به خوبی تامین کند.
الگوی معماری MVC چیست؟
مدل MVC نوعی معماری نرم افزار است که از 3 بخش تشکیل شده است :
Model : این بخش رابط بین ویو و کنترلر است. مدل خود نیز شامل زیربخشهای Data Model، Business Model و View Model است که وظایفی مانند دریافت و ذخیره اطلاعات، تعامل با داده ها، ارسال اطلاعات و شکل دهی منطق سیستمی را به عهده دارند.
View: ویو بخشی است که رابط بین کاربر و نرم افزار است و تعامل بین این دو بخش را کنترل میکند.
Controller: کنترلر رابط بین دو بخش گفته شده است و برای مدیریت درخواستها و عملیاتهای مبتنی بر منطق به کار گرفته میشود.
در یک مثال ساده میتوان کارکرد این معماری را به این شکل توضیح داد که شما آدرس وب سایتی را در مرورگر وارد میکنید. سرور کنترلر مناسب را فراخوانده و کنترلر نیز با هماهنگی ویو و مدل، پاسخ مناسب با درخواست شما را تحویل میدهد.
معماری نرم افزاری MVP چیست؟
معماری MVP الگوی معماری جداگانه ای برای پیاده سازی رابط کاربری نرم افزار دارد که مدل-ویو-پرزنتر (Model-View-Presenter) نام دارد. در این معماری، بخش ارائه دهنده (Presenter) مسئولیت ارائه منطق را به عهده دارد و به دلیل دخاالت داشتن در سازماندهی عملیات سطح بالای سیستمی، فارغ از یک الگوی طراحی، یک الگوی معماری محسوب میشود. به طور کلی این الگوی معماری به کاهش پیچیدگیهای پیاده سازی بخش رابط کاربری نرم افزارها کمک زیادی میکند. مدل MVP به 3 بخش کلی زیر تقسیم میشود:
Model: در نقش یک واسط عمل میکند و داده هایی که باید در رابط کاربری نمایش داده شوند را تعریف میکند.
View: دادهها را نمایش میدهد و دستورات کاربر را به Presenter ارسال میکند.
Presenter: مثل یک پل بین Model و View است. Presenter دادههای مختلف را از مخازن (Model) بازیابی میکند و آنها را برای نمایش در View آماده میکند.
3 بخش بالا به زبان ساده این کار را انجام میدهند:
Model: چه چیزی را نشان دهم؟
View: چطور آن را نمایش دهم؟
Presenter: به مدل چه فرمتی برای نمایش بدهم و رویدادهای کاربر مثل ورودی دادن را چطور مدیریت کنم؟
کاربردهای معماری نرم افزاری MVP چیست؟
برای توسعه اپلیکیشنهای مبتنی بر اندروید امکان استفاده از معماری و الگوهای زیادی وجود دارد اما MVP کمک میکند پروژههای بزرگتر را با دردسر کمتری به اتمام برسانید. در این معماری بخش Model وظیفه مدیریت منطق برنامه و کار با داده را به عهده دارد. این بخش در اپلیکیشنهای اندروید توسط لایه دسترسی به داده مانند APIهای پایگاه داده اجرا میشود. View نیز رابط اتصالی یبن کاربران و Presenter است. بخش P که عامل متمایز کننده این معماری از معماری MVC است رابطی بین بخش ویو و کاربر میباشد. این قسمت وظیفه دارد با دریافت درخواست کاربر و ارائه آن به بخش مدل، قسمت ویو را آپدیت کرده و نتایج درخواست را به کاربر نشان بدهد. این معماری در نرم افزارهای اندروید قابلیت نگهداری و تست پذیری را فراهم میکند. همچنین این امکان را برای توسعه دهندگان فراهم میکند که با جداسازی بخش ویو بتوانند تست واحد (Unit Testing) را به آسانی انجام دهند. پیشنهاد میکنیم برای آشنایی بیشتر به مقاله Unit Testing چیست مراجعه کنید.
پیاده سازی معماری MVP در زبانهای برنامه نویسی مختلف
زبانهای مختلفی وجود دارند که به شما اجازه میدهند معماری MVP را در برنامههای خود استفاده کنید. برای مثال در زبان PHP، فریم ورک Nette از معماری MVP پشتیبانی میکند. در جاوا هم فریم ورک هایی مثل JFace و Vaadin این قابلیت را دارند. همینطور در تکنولوژی دات نت، میتوان معماری MVP را به کار گرفت. MVP محبوبیت زیادی در اندروید دارد و بسیاری از برنامه نویسان اندروید از این الگو استفاده میکنند.
نتیجه گیری
MVP یک Pattern یا الگو از معماری MVC بوده و تفاوت اصلی آن در نحوه کار Controller و Presenter است. زمانی که به کمک یک معماری مثل MVC یا MVP منطق و نمایش برنامه را از هم جدا میکنیم، تمرکز ما روی اجزای مختلف پروژه بیشتر میشود. شاید در پروژههای کوچک استفاده از ساختاری مثل MVP چندان به صرفه نباشد اما وقتی پروژه ما بزرگتر شده و اعضای تیم، قابلیتهای محصول، حجم کدها و غیره بیشتر میشوند منطقی است از یک معماری مثل MVP استفاده کنیم. با این کار زمان زیادی برای خود و اعضای تیم میخریم و فرآیند توسعه، خطایابی و حل مشکلات پروژه کاهش مییابد. اگر تجربه کار با الگو MVP را دارید در بخش نظرات تجربیات خود را با ما و تیم سون لرن در میان بگذارید.
درود
بله در معماری ری اکت فهمش کمی سخته اما شدنی هست. میتونید <a href="https://medium.com/pdvend-engineering/lets-talk-about-react-and-mvp-67ae35b8968c" target="_blank" rel="noopener nofollow ugc">این مقاله</a> رو مطالعه کنید.
سینا۰۹ مرداد ۱۴۰۰، ۰۸:۲۸
سلام من اخر از این معماریهای اندروید سردرنیاوردم، همشون مثل همن بنظرم، من یکساله اندروید را شروع کردم ولی بازم نتونستم بفهممش
نازنین کریمی مقدم۱۷ مرداد ۱۴۰۰، ۱۱:۴۷
درود
خودم هم در گذشته چنین مشکلی داشتم... بنظرم بهتره اول با کتابهای مربوط به دیزاین پترن یادگیری رو شروع کنید بعد مثالهای معماری اندروید رو پیاده سازی کنید. در سایت سرچ کنید یه مقاله معرفی کتاب ازش داریم.
محم خان محمدی۲۱ مهر ۱۳۹۸، ۱۵:۴۶
در مبحث توسعه اندروید این معماری بدلیل تفکیک خوب بین لایههای ویو و دیتا بسیار از حجم مشکلات پر تکرار کم میکنه!بنظرم حتی در پروژهدههای کوچک هم رعایت این معماری الزامیست! البته در دورههای آقای شاهینی از اهمیت انتخاب و اجرای مناسب الگوهای معماری به خوبی پدراخته شده که مطالعه اونها رو پیشنهاد میکنم ?
دانیال یوسفی فر۱۲ مهر ۱۳۹۸، ۱۳:۱۲
با تشکر از مطلب خوبتون.
با توجه به عکس که برای MVC Pattern گذاشتید. در این تصویر نشان داده میشود که ارتباطی بین Model و View هست. ولی در MVC واقعی ارتباطی بین Model و View نیست. و این Controller است که ارتباط این دو رو با هم برقرار میکند.
۲۳ آذر ۱۴۰۰، ۰۵:۰۷
در mvc بین view و model رابطه وجود داره اما این رابطه یک طرفه است. یعنی ویو هر وقت درخواستی داشته باشه حتما به کنترلر میگه و کنترلر هم به مدل میگه اما زمانی که دیتا آماده شد هم میتونه مستقیم از مدل بره سمت ویو هم میتونه دوباره از طریق کنترلر برگرده. این قابلیت رو به این خاطر توی معماری mvc گذاشتن تا اگه تراکنشها به سمت مدل زیاد بود هزینه برگشت داده به سمت ویو رو کمتر کنند. یک لایه هم یک لایه ست.