当我使用实体代码优先创建我的数据库时,如果我在 asp.net 中创建一个 MVC 4 项目,我应该使用什么命名约定。我想明确指出实体模型不是 MVC 模型。例如,我是否应该有一个名为的类Project
来定义 EF 将使用的属性,然后创建一个名为ProjectModel
. 我还将拥有 viewModel,它与以 `ProjectDashboardViewModel. 在设置这样的项目时,对命名约定有哪些建议?
4 回答
您已经有问题表达的强大命名约定。我确实使用完全相同的:)
- 域模型没有前缀 -
Project
Model
不是完全视图模型的 mvc 类的后缀 -ProjectTableRowModel
ViewModel
视图模型的后缀 -ProjectDetailsViewModel
不幸的是,像这样的问题可以有很多答案,实际上并没有一个事实上的标准,但这就是我所做的。
首先,我创建了一个空解决方案,我们将其命名为MyProject。然后我在这个解决方案中添加了一个名为MyProject的类库(我喜欢将域放在根命名空间中)。此类库将包含某些文件夹/命名空间,如下所示:
MyProject
Entities
MyEntity1.cs
MyEntity2.cs
Database
MyContext.cs
然后我将一个 MVC 项目添加到我的解决方案中,将其命名为MyProject.Mvc。我在MyProject.MvcViewModels
中使用and并使用AutoMapper使用我的实体构造它们。我对每个视图都有一个,所以假设我有一个调用了一个动作的控制器, 那么我将有一个专门为此的对象。DataTransferObjects
ViewModel
DashboardController
Overview
DashboardOverviewViewModel
将我的域分开的一个好处是单元测试变得更容易,我将有相应的测试项目,称为MyProject.Tests和MyProject.Mvc.Tests。
最佳实践是将映射到数据库表的实体放置到解决方案中的单独类库中。
您对 DB 模型使用 Project 和 MVC 模型使用 ProjectModel 的建议是适当的。
我认为您的 ProjectModel 实际上是一个 ProjectViewModel,因为属性的选择以及它们的填充方式主要由演示要求驱动。仅仅因为您可能没有项目视图,并不意味着您不能拥有项目视图模型。也许您的 ProjectDashboardViewModel 包含许多 ProjectViewModel 对象。
这一切都是为了更好的可读性和可维护性。
您可以为 ViewModels 创建一个库,比如 SomeProduct.ViewModel.dll 并在 MVC Web 项目中引用它。此程序集中的类后缀为“ViewModel”,例如 RevenueViewModel/RegisterViewModel。还要在这个项目中创建命名空间来组织视图模型模块。
对于实体,您可以创建另一个库,例如 SomeProduct.Entities.dll 并在 MVC Web 项目中引用此程序集。再次有效地使用命名空间来组织程序集中的对象。您可以为这些对象添加“模型”后缀。