Я попытался создать еще одно новое приложение ASP.NET MVC (с Entity Framework) и снова немного разочаровался.
Например, у меня есть база данных со следующими таблицами:
Таблица пользователей:
CREATE TABLE [dbo].[Users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[Title] [nvarchar](max) NOT NULL,
[Company] [nvarchar](50) NOT NULL,
[Phone] [nvarchar](50) NULL,
[CompanyUrl] [nvarchar](max) NULL,
[EmailPlainText] [bit] NULL,
[ProfileImage] [nvarchar](max) NULL,
[ProfileDescription] [nvarchar](max) NULL,
[ProfileDocument] [nvarchar](max) NULL,
[ProfileWebSite] [nvarchar](max) NULL,
[Facebook] [nvarchar](max) NULL,
[Linkedin] [nvarchar](max) NULL,
[MySpace] [nvarchar](max) NULL,
[Twitter] [nvarchar](max) NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[Services](
[ServiceID] [int] IDENTITY(1,1) NOT NULL,
[ServiceName] [nvarchar](250) NOT NULL,
[ServiceOrder] [int] NOT NULL,
CONSTRAINT [PK_Services] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[UserServices](
[UserID] [int] NOT NULL,
[ServiceID] [int] NOT NULL,
CONSTRAINT [PK_UserServices] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[GeographicalAreas](
[GeoAreaID] [int] IDENTITY(1,1) NOT NULL,
[GeoAreaName] [nvarchar](250) NOT NULL,
CONSTRAINT [PK_GeographicalAreas] PRIMARY KEY CLUSTERED
CREATE TABLE [dbo].[UserGeoAreas](
[UserID] [int] NOT NULL,
[GeoAreaID] [int] NOT NULL,
CONSTRAINT [PK_UserGeoAreas] PRIMARY KEY CLUSTERED
Итак, как мы видим, есть: одна таблица для информации о пользователе, 2 таблицы-словаря (Services и GeographicAreas) и 2 таблицы (UserServices и UserGeoAreas) для взаимосвязи много-к-много между пользователем и таблицами-словарями.Стандартная ситуация
Также у нас есть 3 разные страницы:
- На первой странице должны отображаться:
FirstName, LastName, Title, Company, Services(связан с пользователем) и GeoAreas (связан с пользователем)
- На второй странице:
Имя, Фамилия, Название, Компания, Facebook, Linkedin и Twitter
- На третьей странице только FirstName, LastName, ProfileImage и ProfileDocument
Также на странице filrst должны быть проверены такие атрибуты, как «required» и т. Д.
так, как это реализовать?
Первый способ:
Создание 3 разных классов просмотра (3 разных модели) для каждой страницы, создание 3 разных linq-запросов (3 открытых метода в хранилище классов), каждый методконтроллера (для каждой страницы) вызывает соответствующий метод в репозитории классов
Второй способ:
Создайте один общий класс представления (который включает в себя все обязательные поля для 3 страниц), один общий методв репозитории классов, который заполняет все поля, каждый метод контроллера вызывает метод репозитория
Третий способ:
Создание 3 разных классов представления (3 разных модели) для каждой страницыодин общий класс (который включает в себя все необходимые поля для 3 страниц), один метод в хранилище классов, который заполняет все поля, 3 преобразователя для перемещения данных из общего класса в соответствующий класс представления.