使用MVC时实体模型的命名约定

时间:2013-03-28 14:51:08

标签: c# asp.net entity-framework naming-conventions

当我使用Entity Code First创建我的数据库时,如果我在asp.net中创建MVC 4项目,我应该使用什么命名约定。我想说明实体模型不是MVC模型。例如,我应该有一个名为Project的类来定义EF将使用的属性,然后创建一个名为ProjectModel的MVC模型。我也将有viewModels,它将与那些以ProjectDashboardViewModel形式出现的模型有些不同。在设置这样的项目时,命名约定有哪些建议?

4 个答案:

答案 0 :(得分:2)

您已经有了强有力的命名约定。我使用的完全相同:)

  1. 没有域模型的前缀 - Project
  2. 对于不完全是视图模型的mvc类的
  3. Model后缀 - ProjectTableRowModel
  4. 视图模型的
  5. ViewModel后缀 - ProjectDetailsViewModel

答案 1 :(得分:1)

不幸的是,像这样的问题可以有很多答案,实际上没有真正的标准,但这就是我的工作。

首先我创建一个空解决方案,我们称之为 MyProject 。然后我在这个名为 MyProject 的解决方案中添加了一个类库(我喜欢在根命名空间中拥有域)。这个类库将包含某些文件夹/名称空间,如下所示:

MyProject
    Entities
        MyEntity1.cs
        MyEntity2.cs
    Database
        MyContext.cs

然后我将MVC项目添加到我的解决方案中,称之为 MyProject.Mvc 。我在 MyProject.Mvc 中使用ViewModelsDataTransferObjects,并使用AutoMapper使用我的实体构建它们。我对每个视图都有一个ViewModel,所以说我有一个名为DashboardController的控制器,其中有一个名为Overview的操作,那么我将专门为此设置一个DashboardOverviewViewModel对象。< / p>

让我的域名分离的一个好处是单元测试变得更容易,我将有相应的测试项目,名为 MyProject.Tests MyProject.Mvc.Tests

This article is very helpful as another perspective for ViewModel handling

答案 2 :(得分:0)

最佳做法是将映射到数据库表的实体放入解决方案中的单独类库中。

您建议将Project用于数据库模型,将ProjectModel用于MVC模型是合适的。

我认为你的ProjectModel实际上是一个ProjectViewModel,因为属性的选择以及它们的填充方式主要是由表示要求驱动的。仅仅因为您可能没有项目视图,并不意味着您不能拥有Project ViewModel。也许您的ProjectDashboardViewModel包含许多ProjectViewModel对象。

答案 3 :(得分:0)

这一切都是为了提高可读性和可维护性。

你可以为ViewModels创建一个库,比如SomeProduct.ViewModel.dll,并在MVC web项目中引用它。这个程序集中的后缀类带有“ViewModel”,比如RevenueViewModel / RegisterViewModel。还要在此项目中创建名称空间,以便明智地组织视图模型。

对于可以创建另一个库的实体,请说SomeProduct.Entities.dll并在MVC Web项目中引用此程序集。再次有效地使用命名空间来组织程序集中的对象。您可以使用“模型”为这些对象添加后缀。