0. 前言
在《asp.net core系列》之前的文章中,我们简单了解了路由、控制器和视图之间的关系以及静态资源的介绍,这让我们对asp.net core mvc项目有了一个基本的了解。 不过这些并不是asp.net core mvc项目的全部内容,剩下的内容我会结合实际项目给大家讲解一下。 现在网站模板后台管理,让我们开始吧。
一、项目立项
抛开之前的项目,现在跟我来创建一个新项目,第一步仍然是先创建一个解决方案:
dotnet new sln --name Template
首先介绍一下这个项目(指的是整个项目,不是一个单独的asp.net core应用),它是一个后台管理模板应用,提供常用的后台系统(管理员端)功能,包括员工管理、部门管理、作为角色管理。
现在回到项目,通常一个项目需要模型层、数据提供层和Web显示层。 然后,我们依次创建Data、Domain、Web三个项目,其中Data和Domain是classlib,Web是mvc项目。
# 确保当前目录与 Template.sln 处于相同的目录
dotnet new classlib --name Data
dotnet new classlib --name Domain
dotnet new mvc --name Web
将三个项目添加到解决方案中:
dotnet sln add Data
dotnet sln add Domain
dotnet sln add Web
由于模型层存储在Data中,因此其他项目需要对其有引用:
cd Domain
dotnet add reference ../Data
cd ../Web
dotnet add reference ../Data
当然,在实际开发中,我们还应该有一个Service层,用于存放业务代码,减少控制器中不必要的业务代码。 所以请继续:
# 回到项目的根目录
cd ..
dotnet new classlib --name Service
dotnet sln add Service
然后添加对Service的引用:
cd Service
dotnet add reference ../Data
将服务引用添加到 Web:
cd ../Web
dotnet add reference ../Service
现在一个小项目基本都是面向接口编程,几个关键层应该就是socket层。 事实上,我们还缺少Domain和Service的实现层。
cd ..
dotnet new classlib --name Domain.Implements
dotnet new classlib --name Service.Implements
在对应的实现层中,引入他们实现的socket层,并引入Data:
cd Domain.Implements
dotnet add reference ../Data
dotnet add reference ../Domain
cd ../Service.Implements
dotnet add reference ../Data
dotnet add reference ../Domain
dotnet add reference ../Service
这里,Service的实现层添加了Domain套接字层的引用,而不是实现层的引用。 这是因为面向接口编程,我们需要向Service实现层隐藏Domain的实现,所以对于Service实现层来说,不需要关心Domain层的实现逻辑。
添加对Web中新创建的两个实现层的引用:
cd ../Web
dotnet add reference ../Domain.Implements
dotnet add reference ../Service.Implements
将这两个实现层添加到解决方案中:
cd ..
dotnet sln add Domain.Implements
dotnet sln add Service.Implements
下图是目前为止的项目结构图:
整体来看,Data是各层之间数据流通的基础,因此每个项目都依赖于这个项目,而每个socket层的实现层只对Web可见网站模板后台管理,其他层实际上并不知道具体的实现。
隐藏实现层有什么好处?
当然,不仅有这些用途,而且这个还有一个优点。 当web层调用service层的时候会比较复杂,但这并不是无法解决。 后续内容将介绍如何解决这个烦恼。
2. 项目补充
通常,一个完整的项目将包含一个实用项目和一个测试项目。 因此,继续添加以下项目:
dotnet new classlib --name Utils
Utils的意思是工具类。 通常一个项目中工具类较多,所以将其提取到一个项目中单独列出。
添加测试项目:
dotnet new nunit --name Test
这里使用的是nunit 3测试框架,当然另一个是xunit测试框架。
将两个项目添加到解决方案中:
dotnet sln add Utils
dotnet sln add Test
三、总结
本章的内容致力于创建项目,让你了解实际开发中项目的分层规划思想。 这并不是说我的就是最好的,但这只是我总结出来的一个比较方便的层级关系。 这里没有解释如何通过Visual Studio或者Rider创建这样的项目,希望大家可以自己尝试一下。
好吧,我希望你能创造一个好的项目。 当然,稍后我会向大家提供这个项目的源代码,地址暂时保密。