C# 使用MVC时实体模型的命名约定
当我首先使用实体代码创建数据库时,如果我在asp.net中创建MVC4项目,应该使用什么命名约定。我想澄清的是,实体模型不是MVC模型。例如,我应该有一个名为C# 使用MVC时实体模型的命名约定,c#,asp.net,entity-framework,naming-conventions,C#,Asp.net,Entity Framework,Naming Conventions,当我首先使用实体代码创建数据库时,如果我在asp.net中创建MVC4项目,应该使用什么命名约定。我想澄清的是,实体模型不是MVC模型。例如,我应该有一个名为Project的类来定义EF将使用的属性,然后创建一个名为ProjectModel的MVC模型。我还将有viewModels,它将与“ProjectDashboardViewModel”形式的模型有所不同。设置这样的项目时,命名约定的建议是什么?您已经有了强烈的命名约定。我确实使用了完全相同的:) 域模型无前缀-Project Model不
Project
的类来定义EF将使用的属性,然后创建一个名为ProjectModel
的MVC模型。我还将有viewModels,它将与“ProjectDashboardViewModel”形式的模型有所不同。设置这样的项目时,命名约定的建议是什么?您已经有了强烈的命名约定。我确实使用了完全相同的:)
Project
Model
不完全是视图模型的mvc类的后缀-ProjectTableRowModel
ViewModel
视图模型的后缀-ProjectDetailsViewModel
最佳实践是将映射到数据库表的实体放置到解决方案中的单独类库中 您对DB模型使用Project,MVC模型使用ProjectModel的建议是合适的
我认为您的ProjectModel实际上是一个ProjectViewModel,因为属性的选择以及它们的填充方式主要由表示需求驱动。仅仅因为您可能没有项目视图,并不意味着您不能拥有项目视图模型。也许您的ProjectDashboardViewModel包含许多ProjectViewModel对象。不幸的是,像这样的问题可能有很多答案,实际上没有一个真正的标准,但我就是这么做的 首先,我创建了一个空的解决方案,我们称之为MyProject。然后我向这个解决方案添加了一个类库,名为MyProject(我希望域位于根命名空间)。此类库将包含某些文件夹/命名空间,如下所示:
MyProject
Entities
MyEntity1.cs
MyEntity2.cs
Database
MyContext.cs
然后我将一个MVC项目添加到我的解决方案中,称之为MyProject.MVC。我在MyProject.Mvc中使用ViewModels
和DataTransferObjects
,并使用我的实体构建它们。对于每个视图,我都有一个ViewModel
,因此假设我有一个名为DashboardController
的控制器,其操作名为Overview
,那么我将有一个专门用于该操作的dashboardoverviewmodel
对象
将我的域分开的一个好处是,单元测试变得更容易,我将有相应的测试项目,称为MyProject.Tests和MyProject.Mvc.Tests
这一切都是为了更好的可读性和可维护性 您可以为ViewModels创建一个库,比如SomeProduct.ViewModel.dll,并在MVCWeb项目中引用它。将此程序集中的类后缀为“ViewModel”,例如RevenueViewModel/RegisterViewModel。还要在此项目内创建名称空间,以按模块组织视图模型
对于实体,您可以创建另一个库,比如SomeProduct.entities.dll,并在MVC web项目中引用此程序集。再次有效地使用名称空间组织程序集中的对象。您可以用“Model”作为这些对象的后缀。什么是“MVC模型?”模型视图控制器中的“M”表示您的应用程序域和业务逻辑。它包括数据库和表示实体的EF类。当你说“MVC模型”时,这就是你所指的吗?@RobertHarvey我不会直接把我的EF模型传递给视图,所以它们在技术上与MVC使用的模型不同。我的项目实体中有三种类型的模型(创建EF数据库)、MVC模型(这只是抽象EF类)和ViewModels(这实际上提供了它所需的数据视图)。这不是一种正确的方法吗?听起来您指的是存储库或服务层。为“MVC模型”提供附加间接层的目的是什么?EF已经为其实体类提供了间接层。你的应用程序不能直接使用EF类,或者通过一个精简的存储库层吗?@RobertHarvey我的理解是,我不应该将实体模型直接传递给视图。我们的repo层只包含创建EF所需的内容。但是因为它是我们的一些视图模型,所以我们使用两个或三个作为对象传入的类,我们创建了这些其他类。