معماری MVI چیست
معماری ها به ما کمک میکند تا کدهایی بهینه تر تولید کنیم به طوری که سازماندهی ، توسعه و نگهداری این کدها در آینده ساده تر باشد. در این مقاله قصد داریم با یکی از این معماری ها یعنی معماری MVI آشنا شویم.
- چرا از معماری های مختلف برای کد نویسی استفاده میکنیم؟
- معماری MVI چیست؟
- این معماری چه کمکی به بهینه نوشتن کدها میکند؟
- از چه لایه هایی تشکیل شده؟
- وظیفه هر لایه در این معماری چیست؟
- معماری MVI چه تفاوت ها و شباهت هایی با معماری MVP دارد؟
- مزایا و معایب معماری MVI چیست؟
استفاده از معماری ها چه کمکی به کد نویسی میکند؟
برای پاسخ به این سئوال تصور کنید از هیچ معماری برای کد نویسی استفاده نکرده باشیم. برای مثال ممکن است کلیه توابع کلیه توابع را در قسمت های مختلف برنامه تعریف تعریف کرده باشیم. حال تصور کنید بخواهیم قسمت کوچکی از برنامه را اصلاح کنیم. اینجاست که با یک فاجعه روبرو میشویم . یعنی خطایابی قسمتی از کد که پیدا کردن آن میان انبوهی از کدهای سازماندهی نشده کاری دشوار است. از مزایای کد نویسی در معماری های چند لایه این است که میتوانیم برنامه ها را به صورت تیمی پیش بریم بدون آنکه عملکرد هر قسمت روی قسمت های دیگر تاثیر بگذارد.
به عنوان چند نمونه معماری معروف که در کد نویسی از آنها استفاده میشود میتوان به موارد زیر اشاره کرد:
- معماری MVC (Model View Controller)
- معماری MVI (Model View Intent)
- معماری MVVM (Model View View Model)
- معماری MVP (Model Veiw Preseter)
در مقاله قبلی به بررسی معماری MVC پرداختیم. در این مقاله قصد داریم با هم معماری MVI را بررسی کنیم.
معماری MVI چیست؟
در واقع MVI مخفف کلمات Model – View – Intent می باشد. که یکی از معماری های سه لایه است. اساس این معماری بر پایه Intent بنا شده است. یعنی وظیفه اصلی در این معماری سه لایه بر عهده لایه intent به منظور ارتباط بر قرار کردن با لایه های View و Model است. این معماری یک معماری نوظهور است که از فریمورک Cycle.js الهام گرفته است.
این معماری چه کمکی به بهینه نوشتن کدها میکند؟
معماری MVI یا به طور کلی معماری های سه لایه مثل MVC به ما کمک میکنند تنها با یک بار کد نویسی و فراخوانی آن در قسمت های مختلف علاوه بر اینکه از شلوغی کلاسها در قسمت View میکاهد. بتواند تعامل های UI با کاربر را کنترل کند.
معماری MVI از چه لایه هایی تشکیل شده است؟
این معماری از سه لایه Model ، View و Intent تشکیل شده است. که بر شرح وظیفه هریک از این لایه ها خواهیم پرداخت.
لایه Model
در این لایه برای حالت ها یا State های مختلف اپلیکیشن اپلیکیشن کد نویسی میشود. این کد ها در معماری MVI به صورت غیر قابل تغییر هستند. کدهای لایه model به طور مستقیم با پایگاه داده در ارتباطند. در این معماری با ایجاد یک حالت جدید لازم است برای آن حالت مشخص یک model جداگانه نوشت. این مسئله به ما کمک میکند تا با ارسال یک درخواست مشخص تنها یک پاسخ خروجی داشته باشیم. که باعث میشود کد نویسی و توسعه برنامه ساده تر شود.
برای درک بهتر موضوع به مثال زیر دقت کنید:
فرض کنید روی یک قسمت از صفحه کلیک شده و درخواستی برای سرور فرستاده شده سه حالت پیش می آید:
- سرور در حال ارسال پاسخ به مرورگر است. که میتواند این حالت با نمایش یک progressBar صورت گیرد.
- سرور پاسخ را به طور کامل ارسال کرده که باید در قسمت مربوطه نمایش داده شود.
- سرور به هر دلیلی نتوانسته پاسخ مناسب را ارسال کند که باید پیغام خطای مربوطه نمایش داده شود.
در معماری MVI لازم است برای هریک از این حالت ها یک state مشخص جداگانه در لایه model در نظر گرفته شود.
لایه View
این لایه همانطور که از نامش مشخص است . برای تعامل با کاربرهر آنچه کاربر مشاهده میکند در این لایه قرار میگیرد.
این لایه براساس نتیجه ای که لایه intent با استفاده از داده های لایه model میگیرد. قسمت مورد نیاز به کاربر نمایش داده میشود.
لایه Intent
این لایه مهمترین لایه در معماری MVI است. در واقع این لایه وظیفه برقراری ارتباط بین لایه view و لایه model را دارد. در این لایه تصمیم گیری برای اینکه در چه زمانی چه view به کاربر نمایش داده شود. در این لایه تصمیم گیری میشود.
مقایسه MVI با MVP و MVVM
در واقع میتوان گفت MVI تا حدودی شبیه MVP است. از این جهت که در هر دو معماری presenter ای وجود دارد که پروسه ها و تصمیم گیری ها در آن قسمت صورت میگیرد. ولی در تغییراتی که در قسمت UI باید داده شود. در MVI تغییرات تنها از طریق تابع render صورت میگیرد. در صورتی که در MVP ممکن است چندین تابع برای این تغییرات داشته باشیم.
از لحاظی نیز میتوان گفت معماری MVI مشابه معماری MVVM است زیرا در هر دو معماری مشاهده اتفاقات را داریم ولی در MVVM تغییرات قسمت View Model در هر جایی ممکن است اتفاق بیافتد. به بیان دیگر وقتی رویدادی در UI اتفاق می افتد در قسمت در معماری های MVVM و MVP داخل لایه های View Model و لایه presenter لازم است چندین ورودی و خروجی کنترل شود تا تصمیم گیری لازم صورت گیرد. که این مسئله در پروژه های بزرگ میتواند مشکل ساز شود. و پیچیدگی پروژه ها را بالا ببرد.
مهمترین تفاوت MVI با معماری های MVP و MVVM این است که برای حالت های مختلفی که برای اپلیکیش ممکن است بوجود آید. در MVVM و MVP لازم است تابع های مختلف برای تصمیم گیری چک شود در صورتی که در MVI به دلیل وجود حالت ها یا state های مختلف این امر تنها با یک تابع انجام میگیرد که این امر مخصوصا در شرایط پیچیده MVI را نسبت به دو معماری دیگر برتری میدهد.
مزایا و معایب معماری MVI
حال که با ویژگی های معماری MVI آشنا شدیم قصد داریم در این قسمت مزایا و معایب این معماری را با هم بررسی کنیم
مزایا
- داده ها در معماری MVI به صورت یک طرفه و چرخشی هستند.
- نگهداری State ها در این معماری ساده است. در واقع تمرکز اصلی این معماری بر روی این مسئله است.
- در کل زمان استفاده از اپلیکیشن view تنها لازم است یک حالت را بررسی و به لایه های دیگرطلاع دهد.
- خطایابی در این معماری ساده تر است. دلیل آن نیز این است که در هر مرحله تنها وضعیت یک حالت بررسی میشود.
- به دلیل اینکه Model ها در این معماری بدون تعییر هستند. سبب میشود جابجایی بین Thread ها تغییر در Data ها مشکلی برای برنامه ایجاد نکند.
معایب
- به دلیل نوپا بودن این معماری درک و پیاده سازی ان توسط برنامه نویسان کم تجربه سخت است.
- به دلیل اینکه برای هر حالت لازم است یک شی جدید در Model ایجاد شود. این امر ممکن است با گذشت زمان باعث پر شدن حافظه شود.
- به دلیل اینکه برای هر تعامل لازم است یک state جداگانه نوشته شود ممکن است قسمت هایی از کد ها در قسمت های مختلف برنامه تکراری باشند.
جمع بندی
همانطور که در مقاله هم به آن اشاره شد این معماری یک معماری نوپا است و با وجود مزایایی که دارد ولی هنوز نتوانسته محبوبیت لازم را در بین برنامه نویسان پیدا کند. ولی احتمالا در آینده نزدیک خواهد توانست جایگاه خوبی بین توسعه دهندگان اندروید برای خود کسب کند.
سخن آخر
در این مقاله به بررسی معماری MVI پرداختیم. همچنین مقایسه ای با سایر معماری ها انجام دادیم. ولی نمیتوان به طور دقیق گفت کدام معماری نسبت به معماری دیگر برتری دارد. این بسته به نحوه استفاده و تیم متخصص برنامه نویسی است که این کار را به چه صورت انجام میدهد. لذا قبل از شروع برنامه نویسی بهتر است با یک تیم متخصص برنامه نویسی مشورت کنید. تیم تخصصی وب یار شما در در این امر راهنمایی میکند.
پیشنهاد میکنیم برای اطلاعات بیشتر مقاله همه چیز در مورد معماری MVC را که قبلا توسط مجموعه وب یار آماده شده مطالعه نمایید.
همچنین برای دریافت نکات آموزشی بیشتر میتوانید علاوه بر بخش مقالات سایت به صفحه اینستاگرام وب یار مراجعه نمایید.