Шаблони проектування – зразки шаблонів MVC для початківців

0
Зміст Сховати

Тут пояснюється, що таке MVC Pattern і що таке ASP.NET MVC Framework, як це працює. Також пояснюється життєвий цикл сторінки ASP.NET MVC і функції ASP.NET MVC залежно від версії.

Зразки надають мудрі кроки, щоб допомогти початківцям легко зрозуміти ASP.NET MVC і стати досконалим.

Оскільки ми всі знаємо багато шаблонів проектування та використовуємо їх для реалізації бізнес-компонентів і послуг у наших програмах, ми все одно стикаємося з проблемами/проблемами з нашими програмами. Також щоденно змінюватимуться ділові потреби та пріоритети. Якщо ми уважно спостерігаємо за низкою проблем, дефектів і проблем, з якими ми стикаємося, це інтерфейс користувача та рівні презентації. Хоча деякі дефекти пов’язані з бізнес-логікою та бізнес-правилами, нам може знадобитися виправити їх у інтерфейсі користувача та рівнях презентації, оскільки ми можемо тісно інтегрувати бізнес-логіку в інтерфейс користувача та рівні презентації. Причина цього полягає в тому, що ми не зосередилися на реалізації правильного шаблону дизайну в наших програмах. Давайте крок за кроком зрозуміємо, як реалізувати та використовувати шаблон презентації в наших програмах.

Постановка проблеми:
  1. У програмі вже використовуються різні шаблони, але підтримувати програму складно.
  2. Використання VS Test, NUnit, MBUnit тощо для тестування рівня бізнес-логіки, але в додатку все ще існують деякі дефекти, оскільки бізнес-логіка залучена до рівня презентації.
  3. Використовується Рівень презентації, Рівень бізнес-логіки, Рівень доступу до даних у програмі, але все ще іноді потрібно писати надлишковий код на рівні презентації, щоб споживати або викликати інші модулі чи інші випадки використання.
  4. Дефекти інтеграції впроваджуються, коли ми вносимо деякі зміни в інтегровані модулі.
  5. Виправлення дефектів і вдосконалення потребують більше часу для аналізу логіки рівня презентації та його інтеграційних залежностей і викликають відкриття нових дефектів.
  6. ASP.NET MVC не можна вибрати, оскільки інтерфейс користувача складний для створення.
Основна причина проблеми:

У шарі презентації

  1. Сторінка або форма містить елементи керування, які відображають дані домену програми. Користувач може змінювати дані та надсилати зміни. Сторінка отримує дані домену, обробляє події користувача, змінює інші елементи керування на сторінці у відповідь на події та надсилає змінені дані домену. Включення коду, який виконує ці функції, на веб-сторінку Крім того, важко спільно використовувати код між веб-сторінками, які вимагають однакової поведінки. клас складний, його важко підтримувати та тестувати.
  2. Рівень інтерфейсу користувача, логіка інтерфейсу користувача, логіка презентації, бізнес-логіка тісно пов’язані між собою.
  3. Презентаційний рівень піклується про інтеграцію модулів або випадків використання.
рішення:
  1. Виберіть найкращий шаблон шару презентації, щоб розділити рівень інтерфейсу користувача, логіку інтерфейсу користувача, логіку презентації та бізнес-логіку як окремі шари, щоб полегшити розуміння та підтримку коду.
  2. Увімкніть слабий зв’язок під час розробки модулів або будь-яких випадків використання.
  3. Збільште код, який можна перевірити за допомогою автоматизації. (Перегляди важко перевірити.)
  4. Поділіться кодом між сторінками, які вимагають однакової поведінки.
  5. Розділіть відповідальність за візуальне відображення та поводження з обробкою подій на різні класи, названі відповідно представленням і презентатором, або контролером, або ViewModel.
Переваги використання шаблону презентації:
  1. Модульність
  2. Підхід, орієнтований на тестування – максимізуйте код, який можна перевірити за допомогою автоматизації
  3. Поділ турбот
  4. Спільне використання коду між сторінками та формами
  5. Легко обслуговувати

Які шаблони шарів презентації доступні?

MVC (контролер перегляду моделі)

MVP (Model View Presenter) або (Model Passive View, Supervisor Controller)

MVVM (Model View ViewModel)

MVC проти MVP проти MVVM:
  1. Модель і представлення представляють одне й те саме в усіх трьох наведених вище шаблонах?

    Так

  2. Мета контролера, презентера та моделі перегляду однакова в усіх трьох вищезгаданих шаблонах?

    Так

  3. Комунікація та потік моделі, перегляду з контролером, презентатора та моделі перегляду однакові?

    Ні, це причина існування цих 3 моделей.

  4. Чи замінюють ці шаблони PL (рівень презентації), BLL (рівень бізнес-логіки) і DAL (рівень доступу до даних)

    Ні, ці шаблони призначені для відокремлення інтерфейсу користувача та логіки інтерфейсу користувача від логіки презентації та вмикання слабкого зв’язку.

Виберіть найкращий шаблон шару презентації:

MVP

  1. Зв’язування через контекст даних неможливе
  2. Комплексний дизайн інтерфейсу користувача
  3. Найкраще для Windows Forms, веб-форм ASP.NET і програм Sharepoint

MVC

  1. Найкраще для ASP.NET із простим інтерфейсом користувача
  2. Відключена модель (виділення від усіх інших шарів)

Примітка. Тут я не зосереджуюсь на MVC VM (MVC ViewModel з MVC3) і ASP.NET MVVM із впровадженням залежностей.

MVVM

  1. Можливе прив’язування через контекст даних
  2. Підключена модель
  3. Найкраще підходить для програм WPF і Silverlight
ASP.NET Web Forms проти ASP.NET MVC:

Веб-форми ASP.NET

  1. РАД
  2. Більш легкий розвиток
  3. Rich контролює екосистему
  4. Знайомий підхід до розробки Windows Forms
  5. Відсутня ViewStateпідтримка зворотного зв’язку

ASP.NET MVC

  1. Чисте відокремлення концерну (SoC)
  2. Повний контроль розмітки
  3. Увімкнути TDD (Test Driven Development)
  4. Увімкнути та легко зробити REST
  5. Простіша інтеграція на стороні клієнта (Javascript)
  6. Multi View Engine (це дійсно круто!)
  7. Немає ViewState і немає підтримки повернення даних
  8. Розширюваність і підтримка WEB 2.0

Модель, перегляди та контролер

  • Модель: Об’єкти моделі – це частини програми, які реалізують логіку для домену даних програми. Часто об’єкти моделі отримують і зберігають стан моделі в базі даних. Наприклад, об’єкт Product може отримати інформацію з бази даних, працювати з нею, а потім записати оновлену інформацію назад до таблиці Products у SQL Server.
  • Перегляди: Перегляди – це компоненти, які відображають інтерфейс користувача програми (UI). Як правило, цей інтерфейс користувача створюється з даних моделі. Прикладом може бути подання редагування таблиці «Продукти», яка відображає текстові поля, розкривні списки та прапорці на основі поточного стану об’єкта «Продукти».
  • Контролер: контролери — це компоненти, які обробляють взаємодію з користувачем, працюють із моделлю та, зрештою, вибирають подання для відтворення, яке відображає інтерфейс користувача. У програмі MVC перегляд відображає лише інформацію; контролер обробляє та реагує на введення та взаємодію користувача. Наприклад, контролер обробляє значення рядка запиту та передає ці значення моделі, яка, у свою чергу, запитує базу даних, використовуючи значення.
Життєвий цикл високорівневої сторінки ASP.NET MVC?
Життєвий цикл сторінки низького рівня ASP.NET MVC?

Нові можливості MVC2.0

1 Шаблонні помічники:

Templated Helpers допомагає нам автоматично пов’язувати елементи HTML для редагування та відображення з типами даних.

Наприклад, коли дані типу System.DateTimeвідображаються в поданні, елемент інтерфейсу користувача datepicker може бути автоматично відтворено.

Це подібно до роботи шаблонів полів у динамічних даних ASP.NET.

2 області:

Використання областей Ми можемо організувати великий проект на кілька менших розділів, щоб керувати складністю великої веб-програми.

Кожен розділ («область») зазвичай представляє окремий розділ великого веб-сайту та використовується для групування пов’язаних наборів контролерів і представлень.

наприклад

Areas
    Admin
    Controllers
    Models
    Views
    Iniala Claims
    Controllers
    Models
    Views
3 Підтримка асинхронних контролерів:

ASP.NET MVC2 дозволяє контролерам обробляти запити асинхронно.

Це може призвести до підвищення продуктивності, дозволяючи серверам, які часто викликають операції блокування (наприклад, мережеві запити), замість цього викликати неблокуючі аналоги.

4 Підтримка DefaultValueAttributeпараметрів Action-Method:

Клас System.ComponentModel.DefaultValueAttributeдозволяє надавати значення за замовчуванням для параметра аргументу методу дії.

Наприклад, припустимо, що визначено такий маршрут за замовчуванням:

{controller}/{action}/{id}

Також припустимо, що визначено такий контролер і метод дії:

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

Будь-який із наведених нижче URL-адрес запиту викличе метод дії View, визначений у попередньому прикладі.

  • /Стаття/Перегляд/123
  • /Article/View/123?page=1 (Фактично те саме, що й попередній запит)
  • /Article/View/123?page=2
5 Підтримка зв’язування двійкових даних із зв’язувачами моделі:

Є два нових перевантаження Html.Hiddenпомічника, які кодують двійкові значення як рядки, закодовані за базою 64:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);
public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);
6 Підтримка DataAnnotationsатрибутів:

Використання атрибутів RangeAttribute, RequiredAttribute, StringLengthAttributeі RegexAttributeперевірки (визначених у System.ComponentModel.DataAnnotationsпросторі імен), коли ми зв’язуємося з моделлю, щоб забезпечити перевірку вхідних даних.

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 постачальників моделі-валідатора:

Клас провайдера перевірки моделі представляє абстракцію, яка забезпечує логіку перевірки моделі.

ASP.NET MVC включає постачальника за замовчуванням на основі атрибутів перевірки, які включені в System.ComponentModel.DataAnnotationsпростір імен.

8 Перевірка на стороні клієнта:

Клас постачальника моделі-валідатора надає браузеру метадані перевірки у формі серіалізованих даних JSON, які можуть використовуватися бібліотекою перевірки на стороні клієнта.

ASP.NET MVC 2 містить бібліотеку перевірки клієнта та адаптер, який підтримує DataAnnotationsатрибути перевірки простору імен, зазначені раніше.

9 Новий RequireHttpsAttributeфільтр дій:

ASP.NET MVC 2 містить новий RequireHttpsAttributeклас, який можна застосовувати до методів дії та контролерів.

За замовчуванням фільтр перенаправляє запит без SSL (HTTP) на еквівалент із підтримкою SSL (HTTPS).

10 Перевизначення дієслова методу HTTP:

Коли ми створюємо веб-сайт за допомогою архітектурного стилю REST, дієслова HTTP використовуються для визначення того, яку дію виконувати для ресурсу.

REST вимагає, щоб додатки підтримували повний спектр поширених дієслів HTTP, включаючи GET, PUT, POSTі DELETE.

ASP.NET MVC 2 містить нові атрибути, які ми можемо застосувати до методів дій і які мають компактний синтаксис.

Ці атрибути дозволяють ASP.NET MVC вибирати метод дії на основі дієслова HTTP.

Наприклад, POSTзапит викличе перший метод дії, а PUTзапит викличе другий метод дії.

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

У попередніх версіях ASP.NET MVC ці методи дій вимагали докладнішого синтаксису, як показано в наступному прикладі:

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

Оскільки браузери підтримують лише дієслова GETі POSTHTTP, неможливо опублікувати до дії, яка потребує іншого дієслова. Таким чином неможливо підтримувати всі RESTfulзапити нативно.

Однак для підтримки RESTfulзапитів під час POSTоперацій ASP.NET MVC 2 представляє новий HttpMethodOverrideдопоміжний метод HTML.

Цей метод рендерить прихований елемент введення, який змушує форму ефективно емулювати будь-який метод HTTP.

Наприклад, використовуючи HttpMethodOverrideдопоміжний метод HTML, ми можемо зробити так, щоб надсилання форми виглядало як запит PUTабо DELETE.

Поведінка HttpMethodOverrideвпливає на такі атрибути:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 Новий HiddenInputAttributeклас для шаблонних помічників:

Ми можемо застосувати новий HiddenInputAttributeатрибут до властивості моделі, щоб вказати, чи повинен відображатися прихований вхідний елемент під час відображення моделі в шаблоні редактора (атрибут встановлює неявне UIHintзначення HiddenInput).

Властивість атрибута DisplayValueдозволяє вказати, чи відображатиметься значення в режимах редактора та відображення.

Якщо DisplayValueвстановлено значення false, нічого не відображається, навіть розмітка HTML, яка зазвичай оточує поле.

Значенням за замовчуванням DisplayValueє true.

Ми можемо використовувати HiddenInputAttributeатрибут у таких сценаріях:

  • Коли перегляд дозволяє користувачам редагувати ідентифікатор об’єкта, і необхідно відобразити значення, а також надати прихований елемент введення, який містить старий ідентифікатор, щоб його можна було передати назад до контролера.
  • Коли подання дозволяє користувачам редагувати двійкову властивість, яка ніколи не повинна відображатися, наприклад властивість позначки часу.

У цьому випадку значення та навколишня розмітка HTML (наприклад, мітка та значення) не відображаються.

наприклад:

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.ValidationSummaryДопоміжний метод може відображати помилки на рівні моделі:

Замість того, щоб завжди відображати всі помилки перевірки, Html.ValidationSummaryдопоміжний метод має нову опцію для відображення лише помилок на рівні моделі.

Це дає змогу відображати помилки на рівні моделі в підсумку перевірки, а помилки, пов’язані з полями, відображати поруч із кожним полем.

13 Шаблони T4 у Visual Studio генерують код, який є специфічним для цільової версії .NET Framework:

Нова властивість доступна для файлів T4 з хосту ASP.NET MVC T4, яка визначає версію .NET Framework, яка використовується програмою.

Це дає змогу шаблонам T4 генерувати код і розмітку, які є специфічними для версії .NET Framework.

У Visual Studio 2008 значенням завжди є .NET 3.5. У Visual Studio 2010 значенням є .NET 3.5 або .NET4.

14 покращень API:

Додано захищений віртуальний CreateActionInvokerметод у клас Controller.

Цей метод викликається ActionInvokerвластивістю Controller і дозволяє відкладено створювати екземпляр ініціатора, якщо його ще не встановлено.

Джерело запису: instantshift.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі