ASP.NET MVC - 使用单独的项目为实体、数据访问和网站功能创建解决方案
介绍
Microsoft Visual Studio 允许开发人员创建由多个不同类型的项目组成的解决方案,从而简化复杂软件的开发。项目可以编译为可执行文件、DLL 或其他形式,并通过引用解决方案中其他项目的接口、方法和属性相互交互。
即使是相对简单的解决方案也可以通过将软件层和组件分成单独的项目而受益。
将大型复杂的解决方案分成多个项目可以提高开发人员的工作效率,并使在应用程序生命周期内测试、部署和维护解决方案变得更加容易。
技能水平
本指南最适合具有以下技能水平(按主题)的人员:
技术 | 技能水平 |
---|---|
网上邻居 | 中间的 |
C# | 中间的 |
实体框架 | 初学者 |
MVC | 中间的 |
范围
本指南旨在介绍概念和技术,而不是广泛调查可能的解决方案配置及其优势和影响。本指南将展示如何使用实体框架和模型-视图-视图模型 (MVVM) 设计模式以及存储库模式为简单的 Web 应用程序构建解决方案。
多个项目组成的解决方案有时会从单个项目解决方案中产生。本指南将演示如何将单个项目解决方案升级为多项目解决方案。
本指南重点介绍 .NET Framework 解决方案,不包含有关 .NET Core 解决方案的信息。
部署注意事项将在单独的指南中介绍。
结构
首先,我们来看看分层解决方案结构和一些建议的命名约定。
然后,我们将研究为数据驱动的 Web 应用程序设置多项目解决方案的标准流程。
接下来我们将研究将单项目 Web 应用程序转换为多项目应用程序的案例研究。
最后,我们将给出一些针对特殊情况的建议。
先决条件
您应该:
- 了解 ASP.NET MVC,以及
- 了解模型-视图-视图模型 (MVVM) 设计模式。
具有实体框架、MVVM 和存储库模式的 ASP.NET MVC 的分层解决方案结构
概念概述
ASP.NET MVC(模型-视图-控制器)Web 应用程序框架提供了一种采用关注点分离 (SoC) 原则的设计模式。这是一种模块化设计方法,将执行计算机程序特定功能所需的信息隔离在负责该关注点的模块内。
MVC 的M odel部分由 C# 类实现,这些类定义应用程序操作的数据对象的属性和方法。这些类对象在实例化时被称为实体(它们也经常被称为 POCO,即“普通类对象”,因为每个对象只是一个 C# 类)。
模型-视图-视图模型 (MVVM) 设计模式将以概念形式表示数据对象的模型与用于创建视图的模型类的实现分离开来,而视图用于对数据实体执行 CRUD(创建、检索、更新、删除)操作。视图模型反映的是视图的要求,而不是受视图影响的概念对象。
实体框架 (EF) 是一个对象关系映射器 (ORM),它通过在关系数据库 (RDB) 中的持久数据存储和 MVC 框架的模型对象之间创建接口来提供另一层 SoC。EF 支持代码优先数据库设计:开发人员可以编写类对象,这些对象由 EF 转换为 SQL 数据定义语言 (DDL),从而创建和修改底层数据库,并通过迁移使数据存储与模型保持同步。实体框架通过 NuGet 包添加到项目中。
存储库设计模式将存储和检索数据的逻辑与作用于数据的业务逻辑分离开来。这提供了许多好处,包括消除代码重复和促进测试。在 Web 应用程序中,使用存储库模式有助于编写作用于强类型数据对象的简短、定义明确的控制器操作(业务逻辑)。
构建解决方案
如果将上述所有代码合并到一个项目中,则项目目录将包括以下文件夹和文件:
- 控制器
- 视图
- 查看模型
- 实体模型
- 存储库
- 数据上下文
- EF 迁移
再加上应用程序启动、配置、字体、路由、脚本、样式表 (CSS) 和实用程序类的文件。这些文件非常多,而且每当一个区域发生更改时,整个区域的代码都必须重新部署。
在 Visual Studio 解决方案中使用单独的项目,我们可以更好地分离关注点,并促进开发、调试、测试和部署。Web 应用程序的各个层可以分为以下项目:
项目 | 成分 |
---|---|
网页 | 控制器、视图 |
实体 | 模型、视图模型 |
数据 | 数据上下文、存储库 |
常见的 | 实用函数,枚举 |
更复杂的解决方案可能还会有单独的项目用于日志记录、财务交易和其他功能。为了方便处理包含许多项目的解决方案,Visual Studio 默认提供对包含超过 30 个项目的解决方案的选择性加载。
上面确定的每个项目也可能与单元测试项目并行。
解决方案结构示例
按照上面所示方式构建的 Web 应用程序(包括测试项目)的 Visual Studio 解决方案资源管理器视图可能如下所示:
Visual Studio 解决方案资源管理器:多项目解决方案
请注意上面示例的以下属性:
- 点(“.”)可用作项目名称中的分隔符,以便将相关项目分组在一起。
- 单元测试项目的惯例是在测试将要运行的项目名称中添加“.Test”。
- 只有 Blip.Web 是 .NET Framework MVC Web 应用程序项目类型(以绿色地球图标表示),其他项目都是普通的 .NET Framework(空)项目(以绿色“C#”表示)。
与上述解决方案结构对应的文件夹结构如下所示:
文件资源管理器:BlipProjects 目录
BlipProjects 示例项目
本指南的示例项目BlipProjects可在 GitHub 上找到。您可以分叉该存储库或下载 .zip 文件中的解决方案,以继续本指南的其余部分。
BlipProjects 是另一个示例项目BlipDrop的多项目实现,该项目也可以在 GitHub 上找到。因此,您可以轻松比较前后状态,除了添加包含一些实用代码的 Common 项目外,两者在功能或代码上没有任何区别。
创建多项目解决方案
下面使用 BlipProjects 示例解决方案(一个 Web 应用程序)说明了创建多项目解决方案的过程。这些步骤对于创建任何多项目解决方案都是通用的。
在 Visual Studio 中创建新项目
在 Visual Studio 中,选择文件/新建/项目(Ctrl + Shift + N)。
请注意,Visual Studio 2017 或更早版本中没有“新解决方案”选项。
重要提示:这些说明适用于 2017 年 8 月 21 日发布的 Visual Studio 15.3.2 之前的版本,该版本修改了新建项目对话框以添加以下功能:
- 创建项目时创建新解决方案
- 将解决方案名称与项目名称分开定义
- 将新项目添加到现有解决方案或新解决方案
这些变化使得新的多项目解决方案的初始设置变得相当容易。
您应该会看到如下的模式对话框:
Visual Studio:“新建项目”对话框
请务必执行以下操作:
名称:为项目指定您想要分配给整个解决方案的名称。这通常是描述整个应用程序的名称。您将在接下来的步骤中更改 Web 项目的名称。
勾选为解决方案创建目录。这将为包含多个项目的解决方案创建正确的目录结构。
勾选“创建新的 Git 存储库”。因为有了源代码控制,生活会好得多。
单击“确定”。
您将进入一个模式对话框,您可以在其中选择项目类型:
Visual Studio 新建 ASP.NET Web 应用程序对话框
请务必执行以下操作:
选择模板MVC。
添加以下文件夹和核心引用:MVC。
不要选中“添加单元测试”(您可以稍后添加测试,并且您将在下一步中更改关联项目的名称)。
重命名新项目
在 Visual Studio 解决方案资源管理器中你会看到以下内容:
Visual Studio 解决方案资源管理器:单个项目
请注意以下几点:
- 解决方案与项目同名
- 该项目是一个 .NET Framework Web 项目
现在将项目重命名为“Blip.Web”。
解决方案资源管理器现在应如下所示:
Visual Studio 解决方案资源管理器:重命名后的单个项目
请注意以下几点:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~