在《asp.net core 系列》以前的几篇文章中,咱们简单了解了路由、控制器以及视图的关系以及静态资源的引入,让咱们对于asp.net core mvc项目有了基本的认识。不过,这些并非 asp.net core mvc项目的所有内容,剩下的内容我将结合实战项目为你们讲解其中的知识。如今,就让咱们开始吧。web
抛开以前的项目,如今跟着我从新建立一个项目,第一步依旧是先建立一个解决方案:编程
dotnet new sln --name Template
我先介绍一下这个项目(指整个项目,不是单独的asp.net core 应用),这是一个后台管理的模板应用,提供了常见后台系统(管理员端)的功能,包括员工管理、部门管理、角色管理等功能。bash
如今回到项目中,一般一个项目须要一个模型层,一个数据提供层以及web展现层。而后,咱们依次建立 Data、Domain、Web 三个项目,其中Data和Domain 是 classlib,Web是mvc项目。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 中存放着模型层,因此须要其余项目对它有一个引用:asp.net
cd Domain dotnet add reference ../Data cd ../Web dotnet add reference ../Data
固然,实际开发中咱们应当还有一个Service层,这一层用来存放业务代码,减小控制器里没必要要的业务代码。那么继续:ide
# 回到项目的根目录 cd .. dotnet new classlib --name Service dotnet sln add Service
而后添加Service的引用:工具
cd Service dotnet add reference ../Data
将 Service的引用添加到Web里:测试
cd ../Web dotnet add reference ../Service
如今一个大型工程基本都是面向接口编程,几个关键层应当都是接口层,咱们实际上还缺乏Domain的实现层和Service的实现层。优化
cd .. dotnet new classlib --name Domain.Implements dotnet new classlib --name Service.Implements
在对应的实现层中,引入它们实现的接口层,并引入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是各个层之间的数据流通依据,因此各个项目都依赖于此项目,各个接口层的实现层都只对Web可见,其余各层实际上并不清楚具体实现。
隐藏实现层有什么好处呢?
固然,并不仅有这些好处,不过这样有一个坏处,在web层调用service层时会更繁琐,不过这也不是不可解决的,后续的内容中会为你们介绍如何解决这个烦恼。
一般状况下,一个完整的项目还会有一个工具类项目和一个测试项目。因此,继续添加如下项目:
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建立这样的一个项目,我但愿大伙可以本身试试。
好了,但愿你们能建立好项目,固然了后期我会给你们提供这个项目的源码的,地址暂时保密哦。
更多内容烦请关注 个人博客《高先生小屋》