C# 使用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不

当我首先使用实体代码创建数据库时,如果我在asp.net中创建MVC4项目,应该使用什么命名约定。我想澄清的是,实体模型不是MVC模型。例如,我应该有一个名为
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.TestsMyProject.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所需的内容。但是因为它是我们的一些视图模型,所以我们使用两个或三个作为对象传入的类,我们创建了这些其他类。