项目目标部署环境:CentOS 7+html
项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx前端
开源地址:https://github.com/wmowm/nh.corevue
做为.net开发人员,咱们最熟悉的确定是经典的三层架构了mysql
这里插入一个题外话,不少人喜欢拿三层跟mvc,mvvm 作一些比较,它们共通的只有一点,就是解耦,三层架构指的是项目结构,一个项目能够搭建三层,加个IDAL 那就是四层了,也能够是N层,MVC只是 UI层里的一个设计模式,mvvm只是前端的一种设计模式,例如vuenginx
咱们这里就基于经典的三层,进行拓展,并说明彼此之间关系git
先说DAL数据访问层,不少小伙伴喜欢用ADO.net来操做数据库,简单方便,手写sql简洁又高效,这方面进行封装的栗子也不少,先建立一个DAL层,而后Nuget找.net core里操做SQL SERVER的驱动,测试连接,再测试CRUD,测试经过,完美!github
刚高兴了一秒,反过来想一想,好像有点不对劲,咱们部署的目标环境是Linux,Linux上面好像没据说谁用SQL SERVER,用MySQL的最多,难道再去找MySQL的驱动......若是项目需求变了,随便往表里删除几个字段,加几个字段,那估计要崩溃web
如何兼容多种数据库?sql
ORM粉末登场,呸,闪亮登场................................数据库
这里我选用NHibernate5.1,它支持.net core2.0,这里对ORM不作多的介绍,想学习这个ORM的能够去园子里找找资料,挺多的,这里推荐丹妮大叔的博客
不能由于我会NHibernate就选用这款ORM,还有不少优秀的ORM 例如Dapper,国产SqlSugar,微软亲儿子EF ........咱们要作到求同存异
这里我再加一层,IDAL 抽象出CRUD操做,由DAL去实现它,我不用管它是具体是哪款ORM,能实现CRUD便可
IDAL与DAL都属于数据仓储,对数据的一些操做,这里我给它们换个名字
数据访问层作好,咱们就开始作数据模型,没有模型咱们也没法实现CRUD,由于我这边是NHibernate,里面会多一个mapp文件,结构以下
接下来咱们继续搭建业务层,不少人会忽略这一层,把一些业务逻辑写到控制器,或者DAL里面,这种是不可取的,前面咱们已经抽象出了CRUD,没法知足复杂业务的须要,此时就须要在业务层作一些处理
我把它分为两个部分,Method是CRUD,自定义是一些复杂的业务逻辑
作到这里,是否是业务层就完成了呢?
咱们是搭建.net core项目,在.net core无处不在的依赖注入,咱们怎么经过依赖注入实现UI 与 BLL的解耦?
依赖倒置:高层模块不该该依赖底层模块,他们都应该依赖抽象。抽象不该该依赖于细节,细节应该依赖于抽象。
咱们能够抽象一个IBLL,嗯,很对,先抽象出来,后续文章会在讲解Autofac里详细说明,名字也改个高达上的
作完了业务逻辑,咱们就开始作UI层
先建立一个mvc项目,考虑到可能要支持多终端,再建立一个webapi,对外提供统一的服务接口
作到这里,框架基本搭建的差很少了,那么问题来了,那么那个模块该添加Autofac的引用呢?
想作到解耦,第一点就是功能职责单一,因此我新增了一个配置中心,它由两块组成,结构以下
Tibos.Config 引用Autofac,实现AOP与模块注入,在DefaultModule里咱们将业务层注入到Autofac 的IOC容器里面,全部关于Autofac的注入操做,都在这个程序集内实现
Tibos.ConfingModel 用于全局的配置文件读取,.net core里的配置文件格式为json,咱们先将json序列化成model对象,而后注册.net core的中间件,这里的配置文件都是自定义的一些配置文件,根据格式放在指定的文件夹
最后还差个经常使用类库,与测试了,这里就不作过多介绍
到这里,整个项目结构介绍完毕,欢迎各位大佬拍砖,以为有点用的能够去github给我点星,后续介绍里面的一些实现案例
最终结构图
开源地址:https://github.com/wmowm/nh.core
转载请标明原文出处:http://www.cnblogs.com/tibos/p/8881337.html