Шаблоны проектирования — образцы шаблонов MVC для начинающих

8
Содержание Скрыть

В нем объясняется, что такое шаблон MVC и что такое 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 (презентатор представления модели) или (пассивное представление модели, контроллер супервизора)

MVVM (представление модели ViewModel)

MVC против MVP против MVVM:
  1. Модель и представление представляют одно и то же во всех трех вышеперечисленных шаблонах?

    Да

  2. Цель Controller, Presenter и ViewModel одинакова во всех трех вышеперечисленных шаблонах?

    Да

  3. Связь и поток моделей, представлений с контроллером, презентаторов и ViewModel одинаковы?

    Нет, именно поэтому существуют эти 3 шаблона.

  4. Являются ли эти шаблоны заменой PL (уровень представления), BLL (уровень бизнес-логики) и DAL (уровень доступа к данным)

    Нет, эти шаблоны предназначены для отделения пользовательского интерфейса и логики пользовательского интерфейса от логики представления и обеспечивают слабую связь.

Выберите лучший шаблон слоя презентации:

Лучший игрок

  1. Привязка через контекст данных невозможна
  2. Сложный дизайн пользовательского интерфейса
  3. Лучше всего подходит для Windows Forms, ASP.NET Web Forms и приложений Sharepoint

МВК

  1. Лучше всего для ASP.NET с простым пользовательским интерфейсом
  2. Отключенная модель (просмотр отделен от всех других слоев)

Примечание. Здесь я не сосредотачиваюсь на MVC VM (MVC ViewModel из MVC3) и ASP.NET MVVM с внедрением зависимостей.

МВВМ

  1. Возможна привязка через datacontext
  2. Подключенная модель
  3. Лучше всего подходит для приложений WPF и Silverlight
Веб-формы ASP.NET против ASP.NET MVC:

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

  1. РАД
  2. Более легкая разработка
  3. Богатая экосистема управления
  4. Знакомый подход к разработке для Windows Forms
  5. Нет ViewStateи нет поддержки постбэка

ASP.NET MVC

  1. Чистое разделение ответственности (SoC)
  2. Полный контроль разметки
  3. Включить TDD (разработка через тестирование)
  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 шаблон помощников:

Шаблонные помощники помогают нам автоматически связывать HTML-элементы для редактирования и отображения с типами данных.

Например, когда данные типа System.DateTimeотображаются в представлении, элемент пользовательского интерфейса средства выбора даты может отображаться автоматически.

Это похоже на то, как шаблоны полей работают в динамических данных ASP.NET.

2 области:

Использование областей Мы можем разбить большой проект на несколько меньших разделов, чтобы справиться со сложностью большого веб-приложения.

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

Например

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

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

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

4 Поддержка DefaultValueAttributeпараметров метода действия:

Класс 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 (фактически то же самое, что и предыдущий запрос)
  • /Статья/Просмотр/123?page=2
5 Поддержка привязки двоичных данных с помощью связывателей моделей:

Есть две новые перегрузки Html.Hiddenпомощника, которые кодируют двоичные значения как строки в кодировке 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 Поддержка 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)

Поскольку браузеры поддерживают только глаголы HTTP GETи POST, невозможно опубликовать действие, для которого требуется другой глагол. Таким образом, невозможно изначально поддерживать все 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-разметка, которая обычно окружает поле.

Значение по умолчанию для DisplayValuetrue.

Мы можем использовать 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 для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее