我尝试再创建一个新的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个表 - 字典(服务和GeographicalAreas)和2个表(UserServices和UserGeoAreas),用于用户和表字典之间的多对多关系。标准情况
我们还有3个不同的页面:
FirstName,LastName,Title,Company,Services(链接到用户)和GeoAreas(链接到用户)
FirstName,LastName,Title,Company,Facebook,Linkedin和Twitter
此外,在第一页上应该验证“必需”等属性
那么,怎么实现呢?第一种方式:
为每个页面创建3个不同的视图类(3个不同的模型),创建3个不同的linq请求(类库中的3个公共方法),每个控制器的方法(对于每个页面)在类中调用适当的方法-repository
第二种方式:
创建一个公共视图类(包括3个页面的所有需求字段),类库中的一个常用方法,它填充所有字段,每个控制器方法调用存储库的方法
第三种方式:
为每个页面创建3个不同的视图类(3个不同的模型),一个公共类(包括3个页面的所有需求字段),类库中的一个方法,它填充所有字段,3个转换器来移动数据从公共类到适当的视图类。
答案 0 :(得分:2)
如有疑问,请使用Single Responsibility Principle:
在面向对象的编程中,单一责任原则规定每个对象应该只有一个责任,并且该责任应该由类完全封装。它的所有服务都应该与这一责任保持一致。
您的选项1将是正确的选项。每个视图都应该有自己独特的控制器和自己独特的视图模型(最好通过它自己对存储库的不同调用来检索)。