当我使用Entity Code First创建我的数据库时,如果我在asp.net中创建MVC 4项目,我应该使用什么命名约定。我想说明实体模型不是MVC模型。例如,我应该有一个名为Project
的类来定义EF将使用的属性,然后创建一个名为ProjectModel
的MVC模型。我也将有viewModels,它将与那些以ProjectDashboardViewModel形式出现的模型有些不同。在设置这样的项目时,命名约定有哪些建议?
答案 0 :(得分:2)
您已经有了强有力的命名约定。我使用的完全相同:)
Project
Model
后缀 - ProjectTableRowModel
ViewModel
后缀 - ProjectDetailsViewModel
答案 1 :(得分:1)
不幸的是,像这样的问题可以有很多答案,实际上没有真正的标准,但这就是我的工作。
首先我创建一个空解决方案,我们称之为 MyProject 。然后我在这个名为 MyProject 的解决方案中添加了一个类库(我喜欢在根命名空间中拥有域)。这个类库将包含某些文件夹/名称空间,如下所示:
MyProject
Entities
MyEntity1.cs
MyEntity2.cs
Database
MyContext.cs
然后我将MVC项目添加到我的解决方案中,称之为 MyProject.Mvc 。我在 MyProject.Mvc 中使用ViewModels
和DataTransferObjects
,并使用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项目中引用此程序集。再次有效地使用命名空间来组织程序集中的对象。您可以使用“模型”为这些对象添加后缀。