Одностраничные веб-приложения (SPA) с библиотекой KnockoutJS

| Суббота, 9 марта, 2013

Метки: ASP.NET MVC, ASP.NET Web API, Entity Framework, Knockout Комментарии: 0

Модели

В созданном проекте папка Models содержит модели, которые используются на стороне сервера, существуют еще модели и на стороне клиента, но мы рассмотрим их позже.

TodoItem, TodoList

Это модели базы данных для Entity Framework Code First. Эти модели содержат свойства, которые указывают друг на друга. TodoList имеет коллекцию элементов TodoItem, а каждый TodoItem ссылается обратно на своего родителя TodoList. Эти свойства называются свойствами навигации, и они представляют отношение один-ко-многим, то есть у одного todo-списка много todo-элементов.

В классе TodoItem используется атрибут [ForeignKey] , который указывает, что свойство TodoListId – внешний ключ для таблицы ToDoList и Entity Framework создаст этот ключ в базе данных.

[ForeignKey("TodoList")]
public int TodoListId { get; set; }
public virtual TodoList TodoList { get; set; }
TodoItemDto, TodoListDto

Эти классы нужны для данных, которые будут отсылаться клиенту. Суффикс «Dto» означает "data transfer object" (объект передачи данных). Dto-классы определяют, как данные будут сериализовываться в JSON. Приведем основные причины использования этих dto-классов:

  • Контролируем, какие свойства сериализуются. Dto-класс содержит только те свойства, которые нужны клиенту. Это полезно из соображений безопасности и для того, чтобы уменьшить размер передаваемых данных.
  • Изменяем вид передаваемых данных, например, упрощаем структуру данных.
  • Держим бизнес-логику отдельно от dto-классов.
  • Серверные модели могут не сериализовыватся по некоторым причинам, например, из-за обоюдных цикличных ссылок. Dto-классы решают эту проблему.

В одностраничном (SPA) шаблоне, dto-классы содержат те же данные, что и серверные модели. Но все же они уместны, потому что исключают цикличные ссылки свойств навигации и показывают пример использования dto-паттерна.

AccountModels.cs

Этот файл содержит модели для системы управления учетными записями сайта. Класс UserProfile определяет схему для пользовательских профилей в базе данных (в шаблоне SPA, это только идентификатор и имя пользователя). Остальные классы нужны для регистрации и авторизации пользователей.

Entity Framework

В одностраничном шаблоне используется платформа Entity Framework Code First. Разработка с этой платформой начинается с написания моделей в коде приложения, и затем Entity Framework, используя эти модели, создает базу данных. Но можно также использовать EF и с существующей базой данных (Database First).

Класс TodoItemContext в папке Models наследуется от DbContext. Этот класс связывает модели c Entity Framework. TodoItemContext содержит коллекции TodoItem и TodoList. Для получения данных из базы нужно просто написать LINQ-запрос к этим коллекциям. Например, вот так можно получить весь списки to-do для пользователя "testUser".

TodoItemContext db = new TodoItemContext();
IEnumerable lists = 
    from td in db.TodoLists where td.UserId == "testUser" select td;

Элементы в коллекциях можно добавлять, изменять, удалять и потом сохранять изменения в базу данных.

Комментарии
Никто еще не оставил здесь комментарий.
Войдите, чтобы написать комментарий , или воспользуйтесь формой ниже.
 

Copyright © CodeHint.ru 2013-2020