MVC w .NET Adam Żyliński
agenda Czym jest MVC? ASP.NET MVC Windows Azure Przykłady
Czym jest mvc? Model – w którym znajduje się logika biznesowa aplikacji View – odpowiadający za prezentację treści użytkownikowi Controller – zawierający obsługę wejścia - wyjścia w komunikacji z użytkownikiem. Pierwotnie wzorzec architektoniczny MVC powstał pod koniec lat 70-tych ubiegłego wieku w laboratoriach firmy Xerox.
Czym jest mvc? Routing?! – w dalszej części!
zalety Odzielamy logikę biznesową od „sieciowej” Ułatwione dodawanie nowych modułów Architektura sprzyja równoległemu rozwojowi Większa kontrola nad tworzonym rozwiązaniem
Wady Wysoka złożoność rozwiązania Tworzenie zabiera więcej czasu Wyższe koszty Nie nadaje się do małych projektów – koszty tym bardziej w przypadku ASP.NET bo nie jest darmowy
Ruby on Rails Django Spring (opcja) Inne framework’i MVC Django – python spring – Java, mogę się mylić
ASP.NET MVC
Składniki Visual Studio (z ASP.NET) Znajomość C# lub Visual Basic HTML, CSS, jQuery VS – jedyne sensowne środowisko VB raczej tylko w stanach – biblioteka jQuery jest nieodzownym należy się upewnić, że VS został zainstalowany lub doinstalować ASP.NET, serwer IIS jest niezbędny!
schemat Omówimy po kolei co się w każdym z nich dzieje.
Routing w asp.net mvc public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
Routing w ASP.net MVC Pozwala manipulować danymi przesłanymi w URL’u. Zabezpiecza przed nieuprawnionym dostępem do niektórych zasobów (niezależnie od kontrolera) Znaczenie: controller – nazwa kontrolera, do którego zostanie przekierowane żądanie action – nazwa akcji w kontrolerze id – opcjonalne parametry żądania
Kontrolery w asp.net Mvc [RequireHttps] [Authorize(Roles = "Admin")] public class AllMsgController : Controller { MessagesDataModel msg = new MessagesDataModel(); [HttpGet] public ActionResult Index() return View(msg.getAll()); } [HttpPost] [ValidateAntiForgeryTokenAJAX] public JsonResult GetMsg(int id) return Json(msg.getMsgA(id), JsonRequestBehavior.AllowGet); Atrybuty klasy i metody
Kontrolery w asp.net mvc Implementują obsługę zapytań – jak i gdzie dane są przekazywane oraz sposób odpowiedzi. Atrybuty pozwalają szybko określić specyfikę i ograniczenia metody a nawet klasy Poszczególne metody są „akcjami” kontrolera
Tworzenie atrybutów [AttributeUsage(AttributeTargets.Method)] public class ValidateAntiForgeryTokenAJAX : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) var getRequest = filterContext.HttpContext.Request; if (getRequest.IsAjaxRequest()) var getAFTcookie = getRequest.Cookies[AntiForgeryConfig.CookieName]; var cookieVal = getAFTcookie != null ? getAFTcookie.Value : null; AntiForgery.Validate(cookieVal, getRequest.Headers["__RequestVerificationToken"]); } else new ValidateAntiForgeryTokenAttribute().OnAuthorization(filterContext); Pamiętamy o atrybucie przed klasą, w tym przypadku przeznaczony dla metody
Modele w asp.net mvc public class LocalPasswordModel { [Required] [DataType(DataType.Password)] [Display(Name = "Obecne hasło")] public string OldPassword { get; set; } [StringLength(100, ErrorMessage = "{0} musi mieć długość conajmniej {2} znaków!", MinimumLength = 6)] [Display(Name = "Nowe hasło")] public string NewPassword { get; set; } [Display(Name = "Powtórz hasło")] [Compare("NewPassword", ErrorMessage = "Hasło nie jest zgodne z potwierdzeniem hasła!")] public string ConfirmPassword { get; set; } }
Modele w asp.net mvc public class ResPas { cmt24DBclassesDataContext cmtdb = new cmt24DBclassesDataContext(); public StartUsing ResUP(string email) var get_name = from e in cmtdb.Employees select new { e.Id, e.name, e.mail }; StartUsing su = new StartUsing(); foreach (var n in get_name) if (email == n.mail) su.name = n.name; su.mail = email; var getHash = (from r in cmtdb.regTokens where r.UID == n.Id select r.hash).First(); } return su;
Modele w asp.net mvc Odpowiadają za logikę biznesową aplikacji, działają jak zwykłe klasy w C#. Atrybuty pozwalają na etapie modelu określić jak reprezentujemy pola modelu i jakie są wymagania odnośnie danych. Modele stanowią opis danych, przekazywany do widoku. Wyjaśnić zamieszanie z model, ale przecież tam coś ciągle działa! (model to nie tylko opis danych)
Widoki w asp.net mvc @model CMT24.Models.LocalPasswordModel @{ ViewBag.Title = "Twoje konto"; } <div id="userInfo"><img src="~/Content/ajax-loaderBig.gif" /></div> <p class="message-success">@ViewBag.StatusMessage</p> @Html.Partial("_ChangePasswordPartial") <script> $('#userInfo').load('@Url.Action("User","Company")'); </script> @section Scripts { @Scripts.Render("~/bundles/jqueryval") Od razu: silnik renderujący Razor – do klienta i tak przysyłane są dane html’owe ze stylami i skryptami
Widoki w asp.net mvc <table> <tbody id="msgList"> @foreach(var m in @Model) { <tr id="@m.ID" class="success" onclick="" > <td> @m.invNum </td> @m.rec @m.deadL <td>@m.paidD</td> </tr> } </tbody> </table>
Widoki w asp.net mvc Stanowią wzorzec dla renderowanych po stronie serwera dokumentów HTML’owych ViewBag (ExpandoObject) pozwala łatwo dodawać proste dane do widoku poza modelem. W widoku możemy umieścić nie tylko dane z modelu i jego atrybutów, ale również skrypty, style i inne.
Dostęp do Baz danych Polecane ADO.NET Entity Framework LINQ to SQL jest również wygodnym rozwiązaniem, aczkolwiek ograniczonym.
Dodatkowe pakiety i Nuget NuGet to plugin do VS pełniący rolę managera pakietów Dostępne pakiety w obrębie rozwiązania potrafią dodać dodatkowe możliwości w obrębie jednego z elementów MVC (np. komunikacja z BD mySQL) jak i wszystkich (pakiet AngularJS)
Windows azure
Windows azure Z punktu widzenia tematu jest to usługa hostowania aplikacji webowych w chmurze. Ze względu na pełną integrację z środowiskiem VS jest najlepszą usługa dla projektów ASP.NET MVC Niestety jest platformą płatną.
Pytania?
PRzykłady