Wzorce projektowe — przykłady wzorców MVC dla początkujących

0

Wyjaśnia, czym jest wzorzec MVC i czym jest ASP.NET MVC Framework, jak to działa. Wyjaśnia również cykl życia strony ASP.NET MVC i funkcje ASP.NET MVC pod względem wersji.

Przykłady zawierały mądre kroki, które pomogą początkującym w łatwym zrozumieniu i zdobyciu biegłości w ASP.NET MVC.

Ponieważ wszyscy znamy wiele wzorców projektowych i wykorzystujemy je przy wdrażaniu komponentów biznesowych i usług w naszych aplikacjach, nadal będziemy napotykać problemy/wyzwania związane z naszymi aplikacjami. Z dnia na dzień będą się też zmieniać potrzeby i priorytety biznesowe. Jeśli uważnie przyjrzymy się wielu problemom, defektom i wyzwaniom, przed którymi stoimy, to w warstwie interfejsu użytkownika i prezentacji. Chociaż niektóre defekty są związane z logiką biznesową i regułami biznesowymi, być może trzeba będzie je naprawić w warstwach interfejsu użytkownika i prezentacji, ponieważ możemy ściśle zintegrować logikę biznesową w warstwach interfejsu użytkownika i prezentacji. Powodem tego jest to, że nie skupiliśmy się na zaimplementowaniu odpowiedniego wzorca projektowego w naszych aplikacjach. Przejdźmy krok po kroku i zrozummy, jak zaimplementować i wykorzystać wzorzec prezentacji w naszych aplikacjach.

Oświadczenie o problemie:
  1. Używanie już różnych wzorców w aplikacji, ale nadal utrzymanie aplikacji jest trudne.
  2. Używanie VS Test, NUnit, MBUnit itp. do testowania warstwy logiki biznesowej, ale nadal istnieją pewne defekty w aplikacji jako logika biznesowa zaangażowana w warstwę prezentacji.
  3. Używana warstwa prezentacji, warstwa logiki biznesowej, warstwa dostępu do danych w aplikacji, ale czasami trzeba napisać nadmiarowy kod w warstwie prezentacji, aby konsumować lub wywoływać inne moduły lub inne przypadki użycia.
  4. Defekty integracji są wstrzykiwane, gdy wprowadzamy zmiany w zintegrowanych modułach.
  5. Naprawa defektów i ulepszenia zajmują więcej czasu na analizę logiki warstwy prezentacji i jej zależności integracyjnych oraz powodują otwieranie nowych defektów.
  6. Nie można wybrać ASP.NET MVC, ponieważ budowanie interfejsu użytkownika jest skomplikowane.
Podstawowa przyczyna problemu:

W warstwie prezentacji

  1. Strona lub formularz zawiera kontrolki, które wyświetlają dane domeny aplikacji. Użytkownik może modyfikować dane i zgłaszać zmiany. Strona pobiera dane domeny, obsługuje zdarzenia użytkownika, zmienia inne kontrolki na stronie w odpowiedzi na zdarzenia i przesyła zmienione dane domeny. Dołączanie kodu wykonującego te funkcje na stronie sieci Web Ponadto trudno jest współużytkować kod między stronami sieci Web, które wymagają tego samego zachowania. klasa złożona, trudna do utrzymania i trudna do przetestowania.
  2. Warstwa interfejsu użytkownika, logika interfejsu użytkownika, logika prezentacji i logika biznesowa są ze sobą ściśle powiązane.
  3. Warstwa prezentacji zajmuje się integracją modułów lub przypadków użycia.
Rozwiązanie:
  1. Wybierz najlepszy wzorzec warstwy prezentacji, aby oddzielić warstwę interfejsu użytkownika, logikę interfejsu użytkownika i logikę prezentacji oraz logikę biznesową jako osobne warstwy, aby ułatwić zrozumienie i utrzymanie kodu.
  2. Włącz luźne powiązanie podczas opracowywania modułów lub dowolnych przypadków użycia.
  3. Zmaksymalizuj kod, który można przetestować za pomocą automatyzacji. (Widoki są trudne do przetestowania).
  4. Udostępniaj kod między stronami, które wymagają tego samego zachowania.
  5. Rozdziel obowiązki związane z wyświetlaniem wizualnym i obsługą zdarzeń na różne klasy o nazwach odpowiednio widok i prezenter lub kontroler lub ViewModel.
Korzyści z używania wzorca prezentacji:
  1. Modułowość
  2. Podejście oparte na testach – zmaksymalizuj kod, który można przetestować za pomocą automatyzacji
  3. Rozdzielenie obaw
  4. Udostępnianie kodu między stronami i formularzami
  5. Łatwe w utrzymaniu

Jakie są dostępne wzory warstw prezentacji?

MVC (kontroler widoku modelu)

MVP (prezenter widoku modelu) lub (pasywny widok modelu, kontroler nadzorcy)

MVVM (Model widoku widoku modelu)

MVC vs MVP vs MVVM:
  1. Model i Widok reprezentują to samo we wszystkich powyższych 3 wzorach?

    tak

  2. Cel kontrolera, prezentera i ViewModel jest taki sam we wszystkich powyższych 3 wzorcach?

    tak

  3. Komunikacja i przepływ Modelu, Widoku z Kontrolerem, Prezentera i ViewModelu są takie same?

    Nie, to jest powód, dla którego istnieją te 3 wzorce.

  4. Czy te wzorce zastępują PL (warstwa prezentacji), BLL (warstwa logiki biznesowej) i DAL (warstwa dostępu do danych)

    Nie, te wzorce służą do oddzielenia interfejsu użytkownika i logiki interfejsu użytkownika od logiki prezentacji i umożliwiają luźne powiązanie.

Wybierz najlepszy wzór warstwy prezentacji:

MVP

  1. Wiązanie za pomocą kontekstu danych nie jest możliwe
  2. Złożony projekt interfejsu użytkownika
  3. Najlepsze dla Windows Forms, ASP.NET Web Forms i aplikacji Sharepoint

MVC

  1. Najlepsze dla ASP.NET z prostym interfejsem użytkownika
  2. Odłączony model (oddzielenie widoku od wszystkich innych warstw)

Uwaga: Tutaj nie skupiam się na MVC VM (MVC ViewModel z MVC3) i ASP.NET MVVM z Dependency Injection.

MVVM

  1. Możliwe jest wiązanie za pomocą kontekstu danych
  2. Model podłączony
  3. Najlepsze dla aplikacji WPF i Silverlight
Formularze internetowe ASP.NET a ASP.NET MVC:

Formularze internetowe ASP.NET

  1. RAD
  2. Łatwiejszy rozwój
  3. Bogaty ekosystem kontroli
  4. Znajomość podejścia programistycznego do tworzenia Windows Forms
  5. Brak ViewStatei brak obsługi ogłaszania zwrotnego

ASP.NET MVC

  1. Czysta separacja obaw (SoC)
  2. Pełna kontrola znaczników
  3. Włącz TDD (programowanie oparte na testach)
  4. Włącz i sprawia, że ​​łatwo REST
  5. Łatwiejsza integracja po stronie klienta (Javascript)
  6. Multi View Engine (to jest naprawdę fajne!)
  7. Brak obsługi ViewState i ogłaszania zwrotnego
  8. Rozszerzalny i włączony WEB 2.0

Model, widoki i kontroler

  • Model: Obiekty modelu to części aplikacji, które implementują logikę dla domeny danych aplikacji. Często obiekty modelu pobierają i przechowują stan modelu w bazie danych. Na przykład obiekt Product może pobierać informacje z bazy danych, operować na nich, a następnie zapisywać zaktualizowane informacje z powrotem do tabeli Products w SQL Server.
  • Widoki: widoki to składniki, które wyświetlają interfejs użytkownika (UI) aplikacji. Zazwyczaj ten interfejs użytkownika jest tworzony na podstawie danych modelu. Przykładem może być widok edycji tabeli Produkty, w którym są wyświetlane pola tekstowe, listy rozwijane i pola wyboru na podstawie bieżącego stanu obiektu Produkty.
  • Kontroler: Kontrolery to komponenty, które obsługują interakcję użytkownika, współpracują z modelem i ostatecznie wybierają widok do renderowania, który wyświetla interfejs użytkownika. W aplikacji MVC widok wyświetla tylko informacje; kontroler obsługuje i reaguje na dane wprowadzane przez użytkownika i interakcję. Na przykład kontroler obsługuje wartości ciągu zapytania i przekazuje te wartości do modelu, który z kolei wysyła zapytanie do bazy danych przy użyciu tych wartości.
Cykl życia strony wysokiego poziomu ASP.NET MVC?
Cykl życia strony niskiego poziomu ASP.NET MVC?

Nowe funkcje MVC2.0

1 Pomocnicy szablonowi:

Templated Helpers pomaga nam automatycznie kojarzyć elementy HTML do edycji i wyświetlania z typami danych.

Np. gdy dane typu System.DateTimesą wyświetlane w widoku, element interfejsu datepicker może zostać automatycznie wyrenderowany.

Jest to podobne do działania szablonów pól w danych dynamicznych ASP.NET.

2 obszary:

Korzystanie z obszarów Możemy podzielić duży projekt na wiele mniejszych sekcji, aby zarządzać złożonością dużej aplikacji internetowej.

Każda sekcja („obszar") zwykle reprezentuje oddzielną sekcję dużej witryny sieci Web i służy do grupowania powiązanych zestawów kontrolerów i widoków.

Np

Areas
    Admin
    Controllers
    Models
    Views
    Iniala Claims
    Controllers
    Models
    Views
3 Wsparcie dla kontrolerów asynchronicznych:

ASP.NET MVC2 umożliwia kontrolerom przetwarzanie żądań asynchronicznie.

Może to prowadzić do wzrostu wydajności, umożliwiając serwerom, które często wywołują operacje blokujące (takie jak żądania sieciowe), zamiast tego wywoływać nieblokujące odpowiedniki.

4 Wsparcie dla DefaultValueAttributeparametrów metody działania:

Klasa System.ComponentModel.DefaultValueAttributeumożliwia podanie domyślnej wartości parametru argumentu do metody akcji.

Załóżmy na przykład, że zdefiniowano następującą trasę domyślną:

{controller}/{action}/{id}

Załóżmy również, że zdefiniowano następujący kontroler i metodę akcji:

public class ArticleController
{
  public ActionResult View(int id, [DefaultValue(1)]int page)
  {
  }
}

Dowolny z poniższych adresów URL żądań wywoła metodę akcji View zdefiniowaną w poprzednim przykładzie.

  • /Artykuł/Widok/123
  • /Article/View/123?page=1 (W rzeczywistości to samo, co poprzednie żądanie)
  • /Artykuł/Widok/123?page=2
5 Obsługa wiązania danych binarnych z wiązaniami modeli:

Istnieją dwa nowe przeciążenia Html.Hiddenpomocnika, które kodują wartości binarne jako ciągi zakodowane w formacie base-64:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);
public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);
6 Wsparcie dla DataAnnotationsatrybutów:

Używanie atrybutów RangeAttribute, RequiredAttribute, StringLengthAttributei RegexAttributevalidation (zdefiniowanych w System.ComponentModel.DataAnnotationsprzestrzeni nazw), gdy łączymy się z modelem w celu zapewnienia walidacji danych wejściowych.

using System.ComponentModel.DataAnnotations;
namespace MvcTmpHlprs
{
    [MetadataType(typeof(ProductMD))]
    public partial class Product
    {
        public class ProductMD
        {
            public object SellStartDate { get; set; }
            [UIHint("rbDate")]
            public object SellEndDate { get; set; }
            [DataType(DataType.Date)]
            public object DiscontinuedDate { get; set; }
            [ScaffoldColumn(false)]
            public object ModifiedDate { get; set; }
            [ScaffoldColumn(false)]
            public object rowguid { get; set; }
            [ScaffoldColumn(false)]
            public object ThumbnailPhotoFileName { get; set; }
        }
    }
}
7 dostawców walidatorów modeli:

Klasa dostawcy walidacji modelu reprezentuje abstrakcję, która zapewnia logikę walidacji dla modelu.

ASP.NET MVC zawiera domyślnego dostawcę na podstawie atrybutów sprawdzania poprawności, które są zawarte w System.ComponentModel.DataAnnotationsprzestrzeni nazw.

8 Walidacja po stronie klienta:

Klasa dostawcy walidatora modelu udostępnia metadane walidacji przeglądarce w postaci danych serializowanych w formacie JSON, które mogą być używane przez bibliotekę walidacji po stronie klienta.

ASP.NET MVC 2 zawiera bibliotekę sprawdzania poprawności klienta i adapter obsługujący DataAnnotationsatrybuty sprawdzania poprawności przestrzeni nazw wspomniane wcześniej.

9 Nowy RequireHttpsAttributefiltr akcji:

ASP.NET MVC 2 zawiera nową RequireHttpsAttributeklasę, którą można zastosować do metod akcji i kontrolerów.

Domyślnie filtr przekierowuje żądanie bez protokołu SSL (HTTP) do odpowiednika obsługującego protokół SSL (HTTPS).

10 Zastępowanie czasownika metody HTTP:

Kiedy tworzymy witrynę internetową przy użyciu stylu architektonicznego REST, czasowniki HTTP są używane do określania, jakie działania należy wykonać dla zasobu.

REST wymaga, aby aplikacje obsługiwały pełen zakres typowych czasowników HTTP, w tym GET, PUT, POSTi DELETE.

ASP.NET MVC 2 zawiera nowe atrybuty, które możemy zastosować do metod akcji i które charakteryzują się kompaktową składnią.

Te atrybuty umożliwiają ASP.NET MVC wybranie metody akcji na podstawie czasownika HTTP.

Na przykład POSTżądanie wywoła pierwszą metodę działania, a PUTżądanie wywoła drugą metodę działania.

[HttpPost]
 public ActionResult Edit(int id)
  
[HttpPut]
 public ActionResult Edit(int id, Tag tag)

We wcześniejszych wersjach ASP.NET MVC te metody akcji wymagały bardziej szczegółowej składni, jak pokazano w poniższym przykładzie:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id)
 
[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Edit(int id, Tag tag)

Ponieważ przeglądarki obsługują tylko czasowniki GETi POSTHTTP, nie jest możliwe wysłanie do akcji, która wymaga innego czasownika. W związku z tym nie jest możliwe natywne wspieranie wszystkich RESTfulżądań.

Jednak w celu obsługi RESTfulżądań podczas POSToperacji ASP.NET MVC 2 wprowadza nową HttpMethodOverridemetodę pomocnika HTML.

Ta metoda renderuje ukryty element wejściowy, który powoduje, że formularz skutecznie emuluje dowolną metodę HTTP.

Na przykład, używając HttpMethodOverridemetody pomocniczej HTML, możemy sprawić, że przesłany formularz będzie wyglądał jak żądanie PUTlub .DELETE

Zachowanie HttpMethodOverridewpływa na następujące atrybuty:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 Nowa HiddenInputAttributeklasa dla szablonowych pomocników:

Możemy zastosować nowy HiddenInputAttributeatrybut do właściwości modelu, aby wskazać, czy ukryty element wejściowy powinien być renderowany podczas wyświetlania modelu w szablonie edytora (atrybut ustawia niejawną UIHintwartość HiddenInput).

Właściwość atrybutu DisplayValuepozwala określić, czy wartość ma być wyświetlana w trybie edytora i wyświetlania.

Gdy DisplayValuejest ustawiona wartość false, nic nie jest wyświetlane, nawet znaczniki HTML, które zwykle otaczają pole.

Wartość domyślna dla DisplayValueto prawda.

Możemy użyć HiddenInputAttributeatrybutu w następujących scenariuszach:

  • Gdy widok umożliwia użytkownikom edycję identyfikatora obiektu i konieczne jest wyświetlenie wartości oraz podanie ukrytego elementu wejściowego zawierającego stary identyfikator, aby można go było przekazać z powrotem do kontrolera.
  • Kiedy widok pozwala użytkownikom edytować właściwość binarną, która nigdy nie powinna być wyświetlana, na przykład właściwość znacznika czasu.

W takim przypadku wartość i otaczające ją znaczniki HTML (takie jak etykieta i wartość) nie są wyświetlane.

Np:

public class ProductViewModel
{
    [HiddenInput] // equivalent to [HiddenInput(DisplayValue=true)]
    public int Id { get; set; }
  
    public string Name { get; set; }
  
    [HiddenInput(DisplayValue=false)]
    public byte[] TimeStamp { get; set; }
}
12 Html.ValidationSummaryMetoda pomocnicza może wyświetlać błędy na poziomie modelu:

Zamiast zawsze wyświetlać wszystkie błędy walidacji, Html.ValidationSummarymetoda pomocnika ma nową opcję wyświetlania tylko błędów na poziomie modelu.

Umożliwia to wyświetlanie błędów na poziomie modelu w podsumowaniu walidacji oraz błędów specyficznych dla pól obok każdego pola.

13 szablonów T4 w Visual Studio generuje kod specyficzny dla docelowej wersji .NET Framework:

Dostępna jest nowa właściwość dla plików T4 z hosta ASP.NET MVC T4, która określa wersję .NET Framework używaną przez aplikację.

Dzięki temu szablony T4 mogą generować kod i znaczniki specyficzne dla wersji .NET Framework.

W programie Visual Studio 2008 wartość to zawsze .NET 3,5. W programie Visual Studio 2010 wartość to .NET 3,5 lub .NET4.

14 ulepszeń interfejsu API:

Dodano chronioną CreateActionInvokermetodę wirtualną w klasie kontrolera.

Ta metoda jest wywoływana przez ActionInvokerwłaściwość Controller i umożliwia leniwe tworzenie wystąpienia obiektu wywołującego, jeśli żaden obiekt wywołujący nie jest już ustawiony.

Źródło nagrywania: instantshift.com

Comments are closed, but trackbacks and pingbacks are open.

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów