Этот урок посвящен созданию моделей и интерфейсов для хранения и извлечения данных в проекте ASP.NET Core MVC. Пример — интернет-магазин по продаже автомобилей.
Создание моделей
Модели предназначены для хранения информации. В данном случае — текстовой информации о товарах (автомобилях) и их категориях. В дальнейшем информация будет храниться в базе данных, но сейчас работа ведется непосредственно в проекте.
Создание папок
- Создайте папку Data в проекте.
- Создайте папку Models внутри папки Data.
Модель Category
Создайте C# класс Category. Класс содержит поля для хранения информации о категориях автомобилей:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
//public List<Car> Cars { get; set; } // Закомментировано, реализуется позже
}
Модель Car
Создайте C# класс Car. Класс содержит поля для хранения информации о каждом автомобиле:
public class Car
{
public int Id { get; set; }
public string Name { get; set; }
public string ShortDescription { get; set; }
public string LongDescription { get; set; }
public string ImgUrl { get; set; }
public short Price { get; set; }
public bool IsFeatured { get; set; }
public bool Available { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
//public List<Car> Cars { get; set; } // Закомментировано, реализуется позже
}
В модели Car CategoryId указывает на ID категории, к которой относится автомобиль, а свойство Category представляет объект Category, обеспечивающий связь «один-ко-многим» между категориями и автомобилями.
Создание интерфейсов
Интерфейсы определяют функции для извлечения данных из моделей.
Создание папки Interfaces
Создайте папку Interfaces внутри папки Data.
Интерфейс ICategoryRepository
Создайте интерфейс ICategoryRepository:
public interface ICategoryRepository
{
IEnumerable<Category> AllCategories { get; }
}
Интерфейс объявляет функцию AllCategories, возвращающую все категории.
Интерфейс ICarRepository
Создайте интерфейс ICarRepository:
public interface ICarRepository
{
IEnumerable<Car> Cars { get; }
IEnumerable<Car> FeaturedCars { get; }
Car GetCar(int id);
}
Интерфейс содержит функции: Cars (возвращает все автомобили), FeaturedCars (возвращает только автомобили, отмеченные как рекомендуемые), и GetCar (возвращает один автомобиль по ID).
Реализация интерфейсов
Реализация интерфейсов позволяет наполнить модели данными.
Создание папки Repositories
Создайте папку Repositories внутри папки Data.
Реализация CategoryRepository
Создайте класс CategoryRepository, реализующий ICategoryRepository:
public class CategoryRepository : ICategoryRepository
{
public IEnumerable<Category> AllCategories => new List<Category>()
{
new Category { Id = 1, Name = "Электромобили", Description = "Электромобили различных марок" },
new Category { Id = 2, Name = "Автомобили с бензиновым двигателем", Description = "Автомобили с бензиновыми двигателями" }
};
}
Реализация CarRepository
Создайте класс CarRepository, реализующий ICarRepository:
public class CarRepository : ICarRepository
{
private readonly ICategoryRepository _categoryRepository;
public CarRepository(ICategoryRepository categoryRepository)
{
_categoryRepository = categoryRepository;
}
public IEnumerable<Car> Cars { get; } = new List<Car>()
{
// ... (Здесь создаются объекты Car с данными о автомобилях, включая ссылки на категории через CategoryId) ...
};
public IEnumerable<Car> FeaturedCars => Cars.Where(c => c.IsFeatured);
public Car GetCar(int id) => Cars.FirstOrDefault(c => c.Id == id);
}
В CarRepository используется вложенный _categoryRepository для доступа к данным о категориях и создания связей «один-ко-многим».
В этом уроке созданы модели данных (Category и Car), интерфейсы для доступа к ним (ICategoryRepository и ICarRepository), и реализация этих интерфейсов (CategoryRepository и CarRepository). В следующих уроках эти модели и интерфейсы будут использоваться для отображения данных на сайте. Сейчас данные хранятся непосредственно в коде, в дальнейшем — в базе данных.