با سلام خدمت دوستان برنامه نویس ، با یکی دیگر از جلسات آموزش ASP.NET Core در خدمت شما هستیم در جلسه گذشته در مورد نحوه پیاده سازی MVC در ASP.NET صحبت کردیم در این جلسه آموزش ASP.NET میخواهیم معماری MVC با دیگر معماری ها مقایسه نماییم پس با ما همراه باشید.
باید یادآور شد که MVC تنها معماری نرم افزار نیست روش های دیگری هم وجود دارند که برخی از آن ها طرفداران زیادی هم داشته اند. برخی از این روش ها برگرفته از خود MVC و برخی دیگر کاملا متفاوت هستند.
آشنایی با معماری Smart UI
یکی از معمول ترین الگوهای طراحی ، Smart User Interface یا (Smart UI) است هر برنامه نویسی در دوران کاریش پروژه های Smart UI داشته است. اگر پروژههای ویندوز یا ASP.NET WebForm را پیاده کرده باشید، شما هم با چنین الگویی کار کرده اید.
روش متداول در ایجاد پروژهی Smart UI قرار دادن عناصری به نام کنترل بر ناحیه طراحی است. این کنترل ها معمولا در یک جعبه ابزار قرار دارند و از آنجا بر روی فرم طراحی ، به وسیله ماوس ، کشیده و رها میشوند. برخورد کاربر با این کنترل ها، موجب اجرای رویدادها (Events) میشود. در این روش ، برنامه نویس کد لازم برای پاسخ به رویدادها را در کنترل کنندهی رویداد (Event handler) وارد میکند. این کنترلرکنندهها مانند متدهایی هستند که در زمان رخ دادن رویداد (به عنوان مثال ، کلیک ماوس بر روی یک دکمه توسط کاربر ) اجرا میشوند. روش گفته شده ، یک سیستم کاربردی یکپارچه به وجود میآورد.
کاربرد چنین روشی در پروژه های ساده ، نتیجه خوبی به بار میآورد و سرعت کار نیز بالاست (در مقایسه با MVC همانگونه که خواهید دید ، پیش از رسیدن به نتیجه کار ، برای آماده سازی پروژه و برنامه ، کارهای بسیاری باید انجام دهید.)
مهم ترین اشکال این روش در نگهداری و توسعه نرم افزار به دلیل ترکیب کد مدیریت داده های مدل با کد اعمال قوانین تجاری سیستم و کد رابط کاربری است در این وضعیت یک تکه کد برای انجام کاری ویژه باید بارها و بارها در محلهای مختلف کپی شود در این حالت اگر بخواهید تغییری در کارکرد تکه کد گفته شده ایجاد کنید یافتن همه موارد آن و تغییر آنها کار مشکی خواهد بود . در همین سناریو ، اگر یکی از کپی ها از نظر شما مخفی شده و دچار تغییر نشود با چندگانگی یا خطا در کارکرد برنامه روبه رو خواهید شد. آزمایش چنین برنامه ای هم کار مشکلی خواهد بود. تنها راه ممکن ، شبیه سازی تعامل های کاربر با رابط کاربری و کنترل هاست که کار ساده ای نیست.
در دنیای MVC روشی مانند Smart UI را به عنوان ضد الگو (anti-pattern) میشناسند چیزی که باید به هر صورت ممکن از آن دوری کرد. یکی از دلیلهای این موضوع این است که افراد پس از این که تجربیات تلخی در کدنویسی Smart داشته و پس از برخورد با مشکلات سیستم های نرم افزاری که با رشد سرطانی از کنترل خارج شده اند، به MVC روی میآورند.
آشنایی با معماری Model-View
در الگوی Smart ناحیه ای که با بیشترین مشکل نگه داری در آن روبه رو هستید ، پیاده سازی الزامات سیستم است. کد این بخش آن چنان در کل برنامه پخش می شود که پیدا کردن و ویرایش و تغییر آن کاری طاقت فرسا می شود . الگوی برنامه نویسی Model-View با جداسازی کد مربوط به پیاده سازی الزامات سیستم ، بهبود چشمگیری در این بخش به وجود میآورد. در این روش ، داده ها ، پردازش ها و همه قوانین مربوط به آن ها در یک واحدجمع آوری میشوند.
با این که روش Model-View پیشرفتی بزرگ نسبت به روش Smart به شمار میآید ، دارای دو مشکل اساسی است. مشکل نخست ، ترکیب شدن مدل دامین (Domain Model) با رابط کاربری است که آزمایش هر دو را (unit testing) سخت میکند . مشکل دوم چیزی است که به طور معمول در این گونه پروژه ها با آن برخورد می شود و آن این است که مدل ، انباری سرشار از کد دسترسی به داده میشود. معنی آن این است که ، مدل تنها شامل داده های سیستم و پردازش آن ها نمیشود ( در حالی که طبق تعریف مدل – نما باید اینطور باشد.)
آشنایی با معماری سه لایه
معماری سه لایه برای رفع مشکل روش Model-View کد ذخیره و بازیابی داده ها را از مدل جدا می کند و در بخش دیگری به نام لایه دسترسی به داده ها (Date Access Layer) قرار میدهد.
معماری سه لایه با توجه به سادگی ، پیروی از اصل جداسازی دغدغه ها و اینکه محدودیتی بر چگونگی لایه نمایشی یا رابط کاربری بار نمیکند ، پرکاربردترین الگو برای ایجاد برنامه های کاربردی تجاری است. با کمی دقت و توجه ، چنین پروژه هایی را می توان به گونه ای ایجاد کرد که عمل آزمایش کدهم به سادگی انجام شود. شباهت بین معماری سه لایه و MVC به روشنی پیدا است. تفاوت در این است که با مربوط کردن رابط کاربری به فرم هایی که بر پایهی کلیک ها و رویدادها کار میکنند (مانند فرم های ویندوز و ASP.NET معمولی) انجام آزمایش های کد خودکار (Automated Unit Tests) مشکل میشود. افزودن بر این ، از آنجا که کد رابط کاربری در معماری سه لایه بسیار پیچیده میشود ، بخش های زیادی از کد را در عمل نمی توان آزمایش کرد.
به پایان این جلسه آموزشی رسیدیم درصورتی که پیرامون مقالات ASP.NET MVC سوالی داشتید حتما در نظرات این مقاله آموزشی مطرح کنید.