آموزش ASP.NET Core-آموزش ساخت پروژه در ASP.NET Core

تصمیم گرفتم آموزش ASP.NET COre امروز رو با ساخت پروژه در ASP.NET Core MVC شروع کنیم.امروز میخوایم راجع به ساخت پروژه در ASP.NET Core MVC و اضافه کردن کنترلر به پروژه با همدیگه صحبت کنیم.پیش از هر چیزی باید ویژوال استودیو رو بر روی سیستم خودتون نصب کنید و برای نصب ویژوال با ورژن های بالاتر از 2017 باید دو گزینه زیر رو انتخاب کنید :ASP.NET and web development (under Web & Cloud).NET Core cross-platform development (under Other Toolsets)پس از آن باید یک برنامه تحت وب ایجاد کنید که برای اینکار باید مسیر زیر را طی کنید :برای ساخت پروژه در ASP.NET Core MVC، بعد از باز شدن کامل پنجره New Project در پنل سمت چپ گزینه Net Core را انتخاب می کنیم، در پنل وسط تب (ASP.NET Core Web Application (.NET Core انتخاب می کنیم و نام پروژه را MvcMovie می گذاریم. بعد از باز شدن پنچره New ASP.NET Core Web Application (.NET Core) - MvcMovie گزینه Web Application را انتخاب کنید بگونه ای که حالت پیش فرض No Authentication باشد.ویژوال استودیو از یک قالب پیش فرض برای پروژه های MVC استفاده می کند. شما با وارد کردن یک نام پروژه و انتخاب چند گزینه یک برنامه کاری واقعی دارید. با استفاده از کلید F5 یا Ctrl+F5 می توانید پروژه ساخته شده را اجرا کنید.F5 = Debug Mode & Ctrl+F5 = Non-Debug Modeبا استفاده از کلید Ctrl+F5 می توانید بدون دیباگ کردن، پروژه را اجرا کرده و با تغییر در کد ها، بدون نیاز به اجرا میتوانید با رفرش کردن مروگر تغییرات را ببینید.قالب پیش فرض به شما لینک های Home,Contact,About را می دهد. (Model-View-Controller (MVC الگوی معماری این برنامه را به سه قسمت اصلی تقسیم می کند :ModelViewController https://aparat.com/v/15A7s فریم ورک MVC در آموزش ASP.NET Core MVCفریمورک MVC که مخفف Model-View-Controllerاست، یک قالب معماری است که برنامه را از نظر منطقی به سه کامپوننت اصلی مدل (Model)، ویو (View) و کنترلر (Controler) تقسیم می کند. هر یک از این کامپوننت ها برای مدیریت جنبه خاصی از توسعه یک برنامه ساخته می شود. MVC منطق تجاری و لایه نمایش را از یکدیگر جدا می کند. این معماری برای رابط های کاربری گرافیکی قابل اجرا در دسکتاپ استفاده می شد، اما امروزه هم برای طراحی برنامه های تحت وب و هم برنامه های موبایل استفاده می شود.تاریخچه MVCمعماری MVC برای اولین بار در سال 1979 مورد بحث قرار گرفت. پس از آن معماری MVC در سال 1987 در زبان برنامه نویسی Smalltalkظهور کرد و در سال 1988 بعنوان یک مفهوم عمومی پذیرفته شد. در مدت اخیر نیز قالب MVC در برنامه های مدرن تحت وب بصورت گسترده مورد استفاده قرار گرفته است.ویژگی های MVCفریمورکی با قابلیت تست، نصب و توسعه پذیری بالاست.امکان کنترل کامل HTMLرا علاوه بر URLها برای شما فراهم می کند.قدرت نفوذ در مشخصه های موجود ارائه شده توسط ASP.NET ، JSP ، Django و ... را داراست.تفکیک منطق برنامه بصورت آشکار : مدل (Model) ، ویو (View) و کنترلر (Controler). تفکیک وظایف برنامه مانند : منطق تجاری، منطق UIو منطق ورودی.آدرس دهی به URLبرای URLهای سازگار با سئو.قابلیت پشتیبانی برای (Test Driven Development (TDDمعماری MVCدر ASP.NETسه کامپوننت مهم MVC به شرح زیر هستند :مدل (Model) : مدل تمامی داده ها و منطق مربوط به آنها را شامل می شود.ویو (View) : اطلاعات را به کاربر نمایش می دهد یا تعامل کاربر با سیستم را مدیریت می کند.کنترلر (Controller) : رابط کاربری میان کامپوننت های View و Model است.ویو (View) :ویو بخشی از یک برنامه است که مسئولیت نمایش اطلاعات را بعهده دارد. ویوها بوسیله داده های جمع آوری شده از داده های مدل ایجاد می شوند. یک ویو برای دریافت اطلاعات به مدل درخواست می دهد. ویو همینطور داده های مربوط به چت ها، دیاگرام ها و جدول را نیز نشان می دهد. برای مثال، هر ویو تمامی کامپوننت های UI همچون Text Box، Drop Down و ... را شامل می شود.کنترلر (Controller):کنترلر بخشی از یک برنامه است که تعامل کاربر با برنامه را مدیریت می کند. کنترلر، ورودی های کیبورد و موس را تفسیر کرده، و به مدل و ویو اطلاع رسانی می کند تا تغییرات را بصورت مناسب اعمال کند. کنترلر دستورات را به مدل می فرستد تا وضعیت خود را بروزرسانی کند (برای مثال ذخیره یک مستند خاص). کنترلر همینطور دستورات را به ویو مربوطه ارسال می کند تا نمایش ویو را تغییر دهد (برای مثال جابجایی یک مستند خاص).مدل (Model) :داده ها و منطق مربوط به آنها در کامپوننت مدل ذخیره می شود. این کامپوننت، داده هایی که در میان کامپوننت های کنترلر یا هر منطق تجاری دیگری انتقال داده می شوند را نمایش می دهد. برای مثال، یک آبجکت کنترلر اطلاعات کاربر را از پایگاه داده بازیابی و آن را دستکاری کرده و دوباره به پایگاه داده می فرستد یا آن را برای انتقال داده های یکسان بکار می گیرد.کامپوننت مدل به درخواست های فرستاده شده از ویو (View) و همینطور دستورات کنترلر (Controller) پاسخ می دهد تا خود را بروزرسانی کند. این بخش همینطور پایین ترین سطح از قالب است که مسئول حفظ و نگهداری داده هاست.مثالی جالب از MVC:حال بیایید به مصداقی از قالب MVC که در زندگی روزمره با آن مواجه هستیم، بپردازیم :تصور کنید برای صرف غذا به رستوران رفته اید. در این شرایط، شما به آشپزخانه رستوران نمی روید تا غذا مورد نظر خود را آماده کنید، بلکه منتظر آمدن گارسون می مانید تا غذا خود را سفارش دهید.گارسون به نزد شما می آید و شما سفارش خود را ثبت می کنید. گارسون شما را نمی شناسد، تنها جزئیات سفارش غذا شما را ثبت می کند.سپس، گارسون به آشپزخانه می رود؛ اما گارسون غذا را برای شما آماده نمی کند.پس از اینکه گارسون سفارش شما را بهمراه شماره میز به آشپز تحویل داد، آشپز غذا را برای شما آماده می کند.آشپز از مواد اولیه برای طبخ غذا شما استفاده می کند. تصور کنید شما یک ساندویچ سبزیجات سفارش داده اید، پس آشپز مواد مورد نیاز برای غذا شما را از یخچال تهیه می کند.سرانجام آشپز غذا را به گارسون تحویل می دهد و این وظیفه گارسون است که غذا را به بیرون از آشپزخانه منتقل کند.حال گارسون می داند که شما چه غذایی را سفارش داده اید و این غذا چطور سرو می شود.کامپوننت های MVC در این مثال به شرح زیر هستند :View = YouController = WaiterModel = CookData = Refrigeratorفریمورک های معمول MVC در وببرخی فریمورک های معمول در MVC عبارتند از :Ruby on RailsDjangoCakePHPYiiCherryPySpring MVCCatalystRailsZend FrameworkCodeIgniterLaravelFuel PHPSymphonyمزایا فریم ورک MVCدر Asp.NET Core :حفظ و نگهداری کدها و همینطور توسع و رشد آنها آسان است.کامپوننت مدل در MVCرا می توان بصورت مجزا از کاربر تست کرد.پشتیبانی آن برای نمونه کلاینت های جدید آسانتر است.توسعه کامپوننت های مختلف می تواند بصورت موازی انجام شود.فریمورک MVC با تقسیم برنامه به سه واحد – Model, View, Controller – به شما کمک می کند که پیچیدگی برنامه را کاهش دهید.این فریمورک تنها از یک قالب Front Controller که درخواست های یک برنامه تحت وب را در یک کنترلر مجزا پردازش می کند استفاده می کند.بهترین پشتیبانی را برای Test-Driven Development ارائه می دهد.برای برنامه های تحت وبی که توسط تیم های بزرگی از طراحان و توسعه دهندگان وب پشتیبانی می شوند، عملکرد خوبی را از خود نشان می دهند.تفکیک مسئولیت ها در این فریمورک بخوبی انجام می شود.با فرایند بهینه سازی موتور جستجوگر (سئو) سازگار است.تمامی کلاس ها و آبجکت ها مستقل از یکدیگر هستند و می توانند بصورت مجزا تست شوند.فریمورک MVC دسته بندی منطقی فعالیت های مرتبط بهم در یک کنترلر را امکانپذیر می سازد.در یک برنامه MVC نمایش(VIew) ها فقط اطلاعات را نمایش می دهند اما کنترلر(controller ) در تعامل با کاربر می باشد و به ورودی های کاربر واکنش مناسب می دهد. در پنجره Solution Explorer بر روی فولدر Controller راست کلیک کرده و AddNew Item را انتخاب می کنیم.در پنل سمت چپ گزینه Web را انتخاب کرده و در پنل وسط گزینه MVC Controller Class را انتخاب می کنیم و نامش را HelloWorldController می گذاریم.می توانید کدهای زیر را کپی کنید :هر متد (public) در کنترلر (controller ) را می توان به عنوان (HTTP endpoint)خواند. در مثال بالا هر دو متد یک رشته(string) بر می گردانند.HTTP endpoint یک URL قابل جستجو در برنامه وب است مانند: http://localhost:1234/HelloWorld و از پروتکل HTTP استفاده می کند.هر دو متد ما با استفاده از HTTP GET فراخوانی شده اند. برنامه را با استفاده از Ctrl+F5 (non-debug mode) اجرا می کنیم و در آخر مسیر URL کلمه HelloWorld را اضافه می کنیم. متد Index یک رشته(string) بر می گرداند.معماری MVC کنترلر را بسته به نوع ورودی URL فراخوانی میکند(به همراه اکشن مورد نظر ).حالت پیش فرض URL routing logic که توسط MVC استفاده می شود یک فرمت به شکل زیر است :/[Controller]/[ActionName]/[Parameters]فرمت Routing شما درون فایل Startup.cs قرار دارد و پیش فرض به شکل زیر است.اولین بخش URL، کلاس کنترل را برای اجرا تعیین می کند. بنابراین localhost:xxxx/HelloWorld نقشه رسیدن به کلاس HelloWorldController می باشد. دومین بخش URL، تعیین اکشن(action ) در کلاس کنترل می باشد. بنابراین localhost:xxxx/HelloWorld/Index باعث می شود اکشن Index از کلاس HelloWorldController اجرا شود. حال درمرورگر آدرسhttp://localhost:xxxx/HelloWorld/Welcome وارد می کنیم.متد Welcome اجرا می شود و رشته "This is the Welcome action method..." بر می گرداند. برای این URL کنترلر(HelloWorld) و اکشن (Welcome) می باشد.با تغییر کد می توانیم به صورت پارامتر از URL به کنترلر دیتا بفرستیم. برای مثال /HelloWorld/Welcome?name=Rick&numtimes=4. اکشن Welcome را به صورت زیر تغییر می دهیم.توجه داشته باشید که برای نشان دادن این ویژگی سی شارپ به طور اختیاری به پارامتر numTimes مقدار پیش فرض دادیم. از کد HtmlEncoder.Default.Encode استفاده می کنیم برای محافظت برنامه از ورودی های مخرب (یعنی جاوااسکریپت) برنامه را اجرا کرده و به آدرس زیر می رویم:http://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4به جای XXXX پورت سیستم خود را وارد کنید. می توانید از پارامتر های دیگه ای هم به صورت دلخواه استفاده کنید. بخش MVC Model Binding به صورت خودکار پارامتر های نام گذاری شده از query string در URL به پارامتر های اکشن خود انتقال می دهد.در عکس بالا بخش [Parameters] URL هنوز استفاده نشده.( name) و (numTimes) پارامترها منقل می شوند به query string. علامت سوال (؟) در آدرس بالا یک جدا کننده می باشد و query string آن را دنبال می کند. & کاراکتر های query string را جدا می کند. اکشن Welcome را به صورت زیر تغییر می دهیم.برنامه را اجرا کرده و به آدرس زیر می رویم:http://localhost:xxx/HelloWorld/Welcome/3?name=Rickاین بار از بخش سوم [Parameters] URL تحت عنوان ID استفاده می کنیم. اکشن (Welcome) شامل یک پارامتر ID است که الگو URL را در MapRoute دنبال می کند. اگر به دنبال ID علامت سوال(؟) بزاریم به این معنی می شود که پارماتر ID اختیاری است.در این مثال کنترلر در واقع بخشی از "VC" از "MVC" انجام داده است یعنی نمایش (view ) و کنترلر(controller ). کنترلر به طور مستقیم HTML بر می گرداند.به طور کلی شما نمی خواهید که کنترلر HTML بر گرداند زیرا برا نوشتن کد و نگهداری بسیار دشوار می شود. در عوض، شما معمولا از فایل قالب (template) جداگانه Razor برای کمک به تولید HTML استفاده می کنید.در آموزش بعدی از مجموعه آموزش های ASP.NET Core این کار را انجام می دهید.