بررسی تفاوت های ASP.NET Web Forms و ASP.NET MVC

پرووید

دسته های مقالات

بسیاری از افراد بر این باورند که ASP.NET MVC به روی کار آمد تا جای ASP.NET Web Forms را بگیرد، اما باید دقت کرد که این موضوع اصلاً صحت ندارد. هر دوی این فریم ورک ها مزیت ها و معایب خاص خود را دارند. ما در این مقاله ی چند قسمتی در سایت پرووید قسمت داریم این دو فریم ورک را با هم مقایسه کنیم و همچنین به سوالات زیر پاسخ دهیم.

  • ASP.NET چیست؟
  • ASP.NET Web Forms چیست؟
  • MVC چیست؟
  • ASP.NET MVC چیست؟

به علاوه اگر در برنامه نویسی تحت وب با استفاده از MVC و Web Forms تجربه ی کافی دارید، این مقاله به شما کمک می کند که دانش خود را مرور کنید.

در ادامه به سرفصل این مقاله نگاهی می اندازیم:

  • برنامه نویسی ویژوال
  • تکنولوژی های برنامه نویسی وب
  • ASP.NET چیست؟
  • ASP.NET 4.0
  • MVC چیست؟
  • ASP.NET MVC چیست؟
  • چرا از Web Forms و چرا از MVC استفاده کنیم؟
  • نتیجه گیری

برنامه نویسی ویژوال

مایکروسافت با معرفی کردن برنامه نویسی ویژوال (Visual) کار توسعه ی برنامه ها را به شدت آسان کرد. محیط هایی شبیه ویژوال بیسیک، ویژوال سی پلاس پلاس و غیره محیط هایی هستند که در آنها به راحتی می توان واسط کاربری برنامه را با استفاده از کنترل هایی ایجاد کرد. با استفاده از کنترل ها و قابلیت هایی شبیه intellisense برنامه نویس می تواند تمرکز خود را معطوف مسئله ی پیش رو و حل کردن آن کند و نگران طراحی و برنامه نویسی آن نباشد. اما این قابلیت ها فقط مخصوص برنامه نویسی ویندوز بودند و وقتی که بحث برنامه نویسی وب می شد، تنها گزینه ی پیش رو ASP بود.

وقتی که از تکنولوژی های وب صحبت می کنیم کلماتی شبیه ASP، PHP، JSP، ROR، ASP.NET Web Forms، ASP.NET MVC و بسیاری کلمات دیگر به ذهن می رسد. ASP یکی از تکنولوژی هایی بود که توسط مایکروسافت معرفی شد. یکی از مشکلات بزرگ ASP کلاسیک کدهای بسیار در هم بود. به عنوان مثال، فرض کنید قصد طراحی یک واسط کاربری ساده را دارید. یک TextBox و یک Button. کاربری داده ای را وارد می کند و سعی می کند آن را Submit کند. با کلیک روی Button، اطلاعات وارد شده توسط کاربر را با استفاده از سرور Validate می کنیم. ضمناً، توصیه می کنیم که حتماً از آموزش رایگان برنامه نویسی وب با ASP.NET MVC که یک آموزش کاملاً رایگان می باشد نیز دیدن کنید.

مشکل پیش رو در این سناریو این است که بیشتر کدنویسی و کار به گردن خود شماست. به عبارت دیگر:

  • اول باید صفحه را به صورت self-post back تنظیم کنید تا صفحه به خودش post back شود.
  • وقتی کاربر روی دکمه کلیک می کند اطلاعات وارد شده حذف می شوند و تنها راه دسترسی به آن داده ها، خواندنشان از داده های post شده است.
  • اگر اعتبارسنجی داده ها با مشکل روبرو شد:
    • همه ی داده های درون TextBox را با استفاده از داده های پست شده به سرور تنظیم می کنید.
    • یک پیام خطا نشان می دهید.

برنامه نویسی های ویژوال مثل ویژوال بیسیک به منظور ساخت برنامه های تحت ویندوز و دسکتاپ طراحی شده بودند و به همین دلیل فقط محدود به ساخت این نوع برنامه ها بودند. برای ساخت برنامه های تحت وب تنها گزینه ی پیش رو، ASP بود. هنگامی که بحث از برنامه نویسی وب و دسکتاپ به میان می آید، دو موضوع زیر بسیار مهم می شود:

  • نحوه ی مدیریت state به چه صورت است؟ (state به معنی حالت سیستم است.)
  • مکانیزم درخواست/پاسخ بین مرورگر کاربر و سرور به چه صورت انجام می شود.

برنامه نویسی وب بر اساس پروتوکل HTTP کار میکند. پروتوکل HTTP یک پروتوکل stateless است. به عبارت دیگر، هر درخواست و پاسخ بین کاربر و سرور مستقل از درخواست و پاسخ های قبلی هستند. هیچ اطلاعاتی در رابطه با درخواست و پاسخ های قبلی ذخیره نمی شود. علاوه بر این، بر خلاف برنامه نویسی ویندوز، هیچ برنامه نویسی ای بر اساس رویداد ها (event) انجام نمی شود. نقطه ی مشترک برنامه نویسی وب و برنامه نویسی ویندوز در این است که در هر دو، برنامه منتظر ورود درخواستی از سمت کاربر می ماند و سپس به آن پاسخ می دهد. به منظور رفع کردن این محدودیت ها، مایکروسافت فریم ورکی را تحت عنوان ASP.NET Web Forms معرفی کرد که در آن هم برنامه نویسی ویژوال قابل انجام بود هم برنامه نویسی بر اساس رویدادها. در قسمت بعدی از این مقاله در رابطه با ASP.NET بیشتر صحبت می کنیم.

ASP.NET چیست؟

ASP.NET یک فریم ورک برای ساخت برنامه های تحت وب است که توسط مایکروسافت معرفی شد. این فریم ورک بر اساس CLR کار می کند. با استفاده از زبان های سی شارپ و یا وی بی دات نت و یا هر زبان دیگری می تواند برنامه های تحت وب خود را با استفاده از این فریم ورک ایجاد کیند. فریم ورک ASP.NET از دو مدل برای ساخت برنامه های تحت وب پشتیبانی می کند: Web Forms و MVC.

Web Forms چیست؟

در ابتدای کار، مایکروسافت ASP.NET Web Forms را بر اساس ASP معرفی کرد. با استفاده از این فریم ورک جدید، ساخت برنامه های تحت وب بسیار ساده تر از پیش شد. برنامه نویسی stateful بر اساس پروتوکول HTTP که یک پروتوکول stateless است. این کار با استفاده از یک لایه ی abstraction انجام شد. به علاوه، برنامه نویسی رویدادگرا (Event Driven) با استفاده از این فریم ورک جدید قابل انجام بود. به اینصورت برنامه نویسانی که تجربه ی توسعه ی تحت وب را داشتند به راحتی می توانستند در سطح وب هم کار کنند. در این فریم ورک جدید مباحثی شبیه post back (ارسال داده های وارد شده در یک فرم به همان صفحه ی یکسان) و یا ViewState (که امکان ذخیره کردن داده های درون کنترلها را می دهد) معرفی شدند. در واقع مایکروسافت سعی کرد که مدل برنامه نویس ویژوال و رویدادگرا با به عرصه ی وب وارد کند. این کار با معرفی مجموعه ای از کنترلهای قابل استفاده در ساخت برنامه های تحت وب انجام شد.

ASP.NET Web Forms

  • ASP.NET Web Forms با معرفی کنترل هایی ساخت برنامه های تحت وب و در واقع ساخت واسط کاربری آنها را بسیار ساده کرد.
    • اگر با کدهای HTML به صورت مستقیم کار می کنید، می دانید که ممکن است کدی داشته باشید که در یک مرورگر درست کار کند و در مرورگر دیگری به هم بریزد. کنترل های معرفی شده در NET Web Forms با تشخیص مرورگر کاربر، HTML مورد نیاز را تولید می کند.
    • بسیاری از کنترل ها شبیه GridView و ListView با معرفی قابلیتی تحت عنوان Data Binding عملیات کار کردن با داده ها را بسیار ساده می کنند.
  • پشتیبانی از ViewState: همانطور که در قسمت های قبلی این مقاله گفته شد، پروتوکول HTTP یک پروتوکول stateless است. به عبارت دیگر، مقادیر وارد شده در کنترلهای صفحه در هر درخواست و پاسخ ذخیره نمی شوند. ASP.NET Web Forms با معرفی ViewState این مشکل را برطرف کرد. در واقع این قابلیت می تواند آخرین مقادیر وارد شده در هر کنترل را در قالب یک فیلد ذخیره کند و پروتوکول HTTP را به صورت stateful به ما تحویل دهد.
  • برنامه نویسی رویداد گرا(Event Driven): برنامه نویسی رویدادگرا به صورت وسیع در ساخت برنامه های ویندوزی مورد استفاده قرار می گیرد. مایکروسافت سعی کرد که با معرفی مفاهیمی شبیه code behind، post back و viewstate این متدولوژی برنامه نویسی را وارد دنیای وب کند. در واقع با استفاده از برنامه نویسی رویدادگرا، برنامه نویس فقط کافی است که کنترلی را بر روی صفحه قرار دهد، روی آن دابل کلیک کند و سپس کد مربوط به رویداد click را بنویسد.
  • سرعت توسعه ی برنامه: با استفاده از قابلیت های جدید برنامه نویسی در ASP.NET Web Forms، سرعت توسعه ی برنامه به شدت افزایش می یابد. مفاهیمی شبیه برنامه نویسی رویداد گرا، ViewState و حتی مجموعه ای غنی از کنترل ها، کار برنامه نویسی وب را به شدت آسان می کند.
  • نیاز به یادگیری کمتر: برنامه نویسان تحت ویندوز با دانش ی که از برنامه نویسی ویندوز دارند می توانند در وب برنامه نویسی کنند. برنامه نویسی در وب با استفاده از ASP.NET Web Forms نیاز به دانش خیلی کمی در رابطه با HTML و JavaScript دارد.
  • معماری پروژه: در فریم ورک Web Forms هیچ معماری یکپارچه ای برای ساخت برنامه وجود دارد. برنامه نویس می تواند بر اساس سلیقه ی خود یک معماری را انتخاب کند. اغلب افراد برنامه نویسی سه لایه را بر اساس یکی از الگوها شبیه MVP انتخاب می کنند. عده ای هم ممکن است بدون استفاده از یک معماری خاص، تمام کد برنامه را درون code behind قرار دهند که واقعاً کار خطرناکی ست.
  • Unit Testing: در فریم ورک Web Forms کار Unit Testing بسیار دشوار و گاهی غیر ممکن است. به دلیل گره خوردن مستقیم code behind با Event Handler ها کار Unit Testing بسیار سخت خواهد شد. در بسته ی Unit Testing در وبسایت پرووید در رابطه با Unit Testing صبحت کردیم. جالب است بدانید که حتی با استفاده از Moq نیز کار Unit Testing در Web Forms بسیار دشوار خواهد بود.
  • افت کارایی: همانطور که قبلا گفتیم در فریم ورک Web Forms با معرفی ViewState مشکلاتی که در ASP وجود داشت رفع شدند. اما استفاده از ViewState هم باعث افزایش حجم صفحه ی ارسالی به مرورگر کاربر می شود هم کارایی را کاهش می کند. به علاوه، پهنای باند بیشتر مصرف می گردد.
  • قابلیت استفاده مجدد (Reusability): قابلیت استفاده مجدد در Web Forms بسیار پایین است. به همین دلیل اگر قصد دارید که در برنامه ی خود از این موضوع استفاده کنید، شاید Web Forms انتخاب مناسبی نباشد.
    • کنترل کمتر بر روی HTML خروجی: در Web Forms کنترل کمتری بر روی HTML نهایی که به سمت مرورگر کاربر ارسال می شود داریم. زمانی که در قسمت های بعدی این مقاله از MVC صحبت کردیم، خواهید دید که این موضوع در MVC کاملاً برعکس است.
    • SEO: URL هایی که در Web Forms تولید می شوند از نظر SEO ضعیف هستند. این URL ها شامل آدرس فیزیکی فایل ها به علاوه تعدادی Query String هستند که از نظر SEO ضعیف خواهند بود.
  • پشتیبانی کمتر از توسعه ی موازی پروژه: منظور از توسعه ی موازی پروژه این است که گروهی از برنامه نویسان به طور همزمان بر روی پروژه کار کنند. عده ای بر روی فایل های ASPX و تعدادی بر روی code behind پروژه کار کنند. در فریم ورک Web Forms این کار عملاً دشوار و گاهی غیر ممکن است.

ASP.NET 4

در ورژن چهارم از ASP.NET شاهد بهبودهایی هستیم که سعی در حل کردن مشکلات بالا کرده اند. بعضی از آنها عبارت اند از:

  • ViewState: یکی از قابلیت های اضافه شده این است که می توانید ViewState را فعال یا غیرفعال کنید و همینطور سایز آن را نیز کنترل کنید.
  • URL Routing: با استفاده از این قابلیت، به جای استفاده از آدرس فیزیکی فایل ها که برای SEO مشکل ساز هستند، می توانیم آدرس مورد نظر خود را در نظر بگیریم.
  • ID: اضافه شدن یک پروپرتی جدید به اسم id به کنترل ها به ما این امکان را می دهند که با جاوا اسکریپت بهتر کار کنیم. دقت کنید که در ورژن چهارم از ASP.NET هنوز به طور کامل بر روی HTML نهایی کنترل نداریم.

نکته ی جالب در این است که حتی پس از اضافه شدن این قابلیت های جدید برای از بین بردن مشکلاتی که از آنها یاد شد، هنوز امکان انجام Unit Testing وجود ندارد. (ما در بسته ی Unit Testing از وبسایت پرووید در رابطه با Unit Testing با فریم ورک NUnit صحبت کرده ایم.) به علاوه، غیرفعال کردن ViewState موضوعی ست که کمتر کسی از آن استفاده می کند. به علاوه، بر روی HTML نهایی کنترل کامل نداریم و استفاده از جاوا اسکریپت بسیار دشوار است.

MVC یک الگوی معماری است. (ما در بسته ی جامع آموزش الگوهای طراحی در رابطه با مهمترین الگوهای طراحی در برنامه های شی گرا صحبت کرده ایم.) MVC چیز تازه ای نیست. علاوه بر این، گمان نکنید که مایکروسافت MVC را معرفی کرد. خیلی وقت است که الگوی طراحی MVC معرفی شده است. چیزی که مایکروسافت معرفی کردن ASP.NET MVC ست. یعنی استفاده از این الگوی طراحی در فریم ورک ASP.NET به منظور ساخت برنامه های تحت وب. اما قبل از صحبت کردن در رابطه با ASP.NET MVC، بیایید کمی در رابطه با الگوی MVC صحبت کنیم.

الگو (Pattern): به بیان ساده ، الگو یه راه حل برای حل یک مسئله ست. هر کدام از الگوهای طراحی به منظور حل کردن مشکلی معرفی شده اند.

الگوهای معماری (Architectural Patterns): الگوهای معماری به منظور رفع کردن مشکلی در سطح معماری سیستم معرفی شده اند. با استفاده از این الگوها، ساخت کلی پروژه را تعریف می کنیم. کلاس ایجاد می کنیم، وب سرویس و کامپوننت می نویسیم.

MVC: MVC یک الگوی معماری ست که به ما این امکان را می دهد که ساختار کلی پروژه را تعریف کنیم. قسمت های مختلف آن را بسازیم و با استفاده از خاصیت های این الگو پروژه را ایجاد کنیم. دلیل اصلی استفاده از MVC جدا سازی مسائل (Separation of Concerns) است. به عبارت ساده تر، با استفاده از MVC می توانیم قسمت های مختلف برنامه مثل واسط کاربری و لایه ی تجاری را از هم جدا کنیم. بر اساس معماری MVC، یک برنامه باید به سه قسمت تقسیم شود:

  • Model: مدل بخشی از معماری MVC است که از دو بخش دیگر یعنی View و Controller مستقل است و مسئول فراهم کردن داد ها و منطق تجاری برنامه است.
  • Controller: کنترلر مسئول مدیریت درخواست های کاربر است. به عبارت دیگر، وظیفه ی کنترلر دریافت درخواست کاربر و پاسخ دادن به آن است. کنترلر در معماری MVC هم از View و هم از Model اطلاع دارد.
  • View: ویو یه نمایش از داده های مدل است و اغلب یک صفحه ی وب است. ویو می تواند یک صفحه ی اکسل، یک رشته ی متنی و … نیز باشد. در واقع وظیفه ی ویو به نمایش در آوردن داده های مدل است. ویو از مدل اطلاع دارد.

ASP.NET MVC یکی دیگر از فریم ورک های مایکروسافت برای توسعه ی برنامه های تحت وب است. هدف از طراحی ASP.NET MVC راحت سازی عمل Unit Testing و همچنین separation of concerns است. در ASP.NET MVC خبری از سرور کنترل ها و ViewState نیست. فریم ورک ASP.NET MVC دقیقاً بر اساس معماری MVC که در قسمت قبلی از آن یاد شد طراحی شده است.

در ادامه به مزیت های ASP.NET MVC می پردازیم:

  • معماری پروژه: یکی از مزیت های مهم ASP.NET MVC ساختار یکپارچه ی پروژه است. به عبارت دیگر با پیاده سازی پروژه بر اساس معماری MVC دیگر نگران به هم ریختن ساختار پروژه نیستیم.
  • توسعه ی تست محور و قابلیت استفاده مجدد (Test Driven Development and Reusability): در NET MVC، کنترلر ها تنها کلاس های معمولی دات نت هستند که از کلاس پدر Controller ارث بری می کنند. به همین دلیل به راحتی می توان کنترلر را مورد Unit Testing قرار داد و بعلاوه چون به هیچ View ی مقید (Bound) نیستند، می توان از آنها به چند باره استفاده کرد. این موضوع برای ما قابلیت استفاده ی مجدد را فراهم می کند.
  • کارایی: به دلیل عدم پشتیبانی ASP.NET MVC از ViewState، سایز صفحات تولید شده به شدت کمتر و در نتیجه کارایی بالاتر است.
  • کنترل کامل بر روی HTML تولید شده: به دلیل عدم استفاده ی ASP.NET MVC از سرور کنترل ها، می توان بر روی HTML نهایی کنترل کامل داشت. تنها گزینه ی پیش روی ما در ASP.NET MVC استفاده از HTML Helper Method ها ست. به علاوه، با وجود پروپرتی id برای این Helper Method ها می توان به راحتی از جاوا اسکریپت و جی کوئری استفاده کرد.
  • پشتیبانی از توسعه ی موازی: به دلیل جدا بودن بخش های مختلف یک پروژه ی ASP.NET MVC از یکدیگر، برنامه نویس ها می توانند به صورت موازی بر روی بخش های مختلف یک پروزه کار کنند. به عنوان مثال، یک برنامه نویس بر روی مدل، دیگری بر روی ویو و نهایتاً یک برنامه نویس دیگر بر روی کنترلر کار کند. این موضوع را تحت عنوان توسعه ی موازی می شناسیم.
  • SEO: با استفاده از سیستم Routing در ASP.NET MVC آدرس هایی را تولید می کنیم که از نظر سئو کارایی بهتری دارند و به علاوه برای کاربر نیز خوانایی بالاتری دارند.
  • قابلیت گسترش (Extensibility): با استفاده از ASP.NET MVC می توان برای رندر کردن ویو ها از موتورهای مختلف استفاده کرد. به صورت پیش فرض دو موتور ASPX و Razor در ASP.NET MVC طراحی شده اند. اما در صورت نیاز می توان موتورهای دیگر را نیز اضافه کرد.
  • قابلیت های سابق ASP.NET: به دلیل اینکه ASP.NET MVC بر اساس فریم ورک ASP.NET طراحی شده است، بسیاری از ویژگی های مهم این فریم ورک را در خود دارد. بعضی از این ویژگی ها شبیه سیستم کش، windows authentication، session، profile state management و غیره است.

شاید بتوان گفت که تنها عیب ASP.NET MVC در این است که نیاز به یادگیری بیشتری دارد. به دلیل عدم پشتیبانی از برنامه نویسی رویداد گرا و سرور کنترل ها و ViewState کار ساخت برنامه های تحت وب بر اساس ASP.NET MVC کمی دشوار و نیاز به یادگیری بیشتری دارد.

در این قسمت از مقاله ی مقایسه ی ASP.NET MVC و ASP.NET Web Forms قصد داریم روال کار کردن یک برنامه ی تحت وب بر اساس فریم ورک ASP.NET MVC را بیان کنیم.

  1. با وارد کردن یک URL در مرورگر خود، کاربر تقاضای یک منبع (Resource) را بر روی سرور می کند. دقت کنید که یک منبع می تواند یه عکس، یک فیلم، یک صفحه و … باشد.
  2. درخواست کاربر به یک کنترلر وارد می شود و آن کنترلر با یکی از متدهای خود درخواست کاربر را پردازش می کند. تشخیص اینکه درخواست کاربر به کدام کنترلر و کدام متد از آن کنترلر وارد شود وظیفه ی موتور Routing در ASP.NET MVC است.
  3. در صورت نیاز، کنترلر با بخش مدل از معماری ارتباط برقرار می کند.
  4. بخش مدل در صورت نیاز با بانک اطلاعاتی برنامه و یا هر دیتاسورس دیگری ارتباط برقرار کرده و داده ها را در قالب اشیایی به کنترلر تحویل می دهد.
  5. کنترلر پس از دریافت داده ها از مدل، ویو مورد نظر خود را انتخاب می کند.
  6. کنترلر ویو مورد نظر را انتخاب، داده های دریافتی از مدل را به آن تحویل داده و نهایتاً آن را به سمت کاربر ارسال می کند.

این روال برای درخواست داده از سرور بود. برای ارسال داده از سرور نیز دقیقاً همین اتفاق می افتد با این تفاوت که کاربر به جای وارد کردن URL در مرورگر خود، داده ای بر فرمی که در مرورگر خود می بیند ارسال می کند. پس از آن دقیقاً کنترلر وارد عمل می شود و روال کار شبیه بالا انجام می شود.

در آخرین قسمت از مقاله ی مقایسه ی ASP.NET MVC و ASP.NET Web Forms قصد داریم در رابطه با اینکه کدام فریم ورک را باید انتخاب کنیم صحبت خواهیم کرد. هر دوی این فریم ورک ها مناسب هستند. بر اساس تجربه ی کاری تیم نرم افزاری خود و همچنین نیازمندی های برنامه می توانید یکی از این فریم ورک ها را انتخاب کنید. هنگامی که قصد انتخاب یکی از این دو فریم ورک را دارید باید در نظر داشته باشید که هیچ کدام از این دو به منظور جایگزینی برای دیگری طراحی نشده است. هر دو ویژگی های خاص خود و مزیت ها و معایب خود را دارند. هنگام تصمیم گیری در رابطه با این فریم ورک دو فاکتور زیر بسیار مهم می شوند:

  1. اگر قصد توسعه ی سریع برنامه (Rapid Application Development) را دارید، ASP.NET Web Forms بسیار مناسب تر است. در واقع برای توسعه ی سریع برنامه بهتر است که اصلا به MVC فکر هم نکنید.
  2. اگر انجام Unit Testing در پروژه برای شما مهم است، شک نکنید که باید به سراغ MVC بروید.

علاوه بر این دو فاکتور بسیار مهم، می توانید به منظور تصمیم گیری سوالات زیر را بررسی کنید:

  • آیا تیم نرم افزاری شما با برنامه نویسی رویدادگرا شبیه برنامه های ویندوزی تجربه ی کار دارد؟ در این صورت، ساخت برنامه های وب در MVC بسیار دشوار می باشدو انتخاب Web Forms به مراتب بهتر خواهد بود.
  • آیا تیم کاری شما با MVC آشنایی دارد؟ در اینصورت، انتخاب MVC بسیار مناسب تر خواهد بود.
  • آیا تیم کاری شما با ساخت برنامه های وب در فریم ورک های دیگر تجربه ای دارد؟ برای مثال، اگر تیم شما با ASP کلاسیک و یا JSP تجربه ی کاری دارد، انتخاب MVC مناسبتر خواهد بود. ساختار کلی فریم ورک MVC بیشتر به این موارد شبیه است.
  • آیا قصد دارید از جاوا اسکریپت به صورت گسترده استفاده کنید؟ اگر پاسخ مثبت است، کار با MVC بسیار مناسب تر خواهد بود. با استفاده از MVC کنترل کافی بر روی HTML خروجی خواهید داشت و یکپارچه کردن جاوا اسکریپت به مراتب ساده تر خواهد بود.
  • آیا کارایی برنامه برای شما اهمیت دارد؟ با عدم پشتیبانی از ViewState، ساخت برنامه در MVC به مراتب کارایی بهتری را برای شما فراهم می کند. بنابراین، اگر کارایی برنامه برای شما فاکتور مهمی است، به MVC فکر کنید.
  • آیا قابلیت استفاده مجدد اهمیت دارد؟ اگر پاسخ این سوال نیز مثبت است، باید به فریم ورک MVC فکر کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *