项目目标部署环境:CentOS 7+
项目技术点:.netcore2.0 + Autofac +webAPI + NHibernate5.1 + mysql5.6 + nginx
开源地址:https://github.com/wmowm/nh.core
作为.net开发人员,我们最熟悉的肯定是经典的三层架构了
这里插入一个题外话,很多人喜欢拿三层跟mvc,mvvm 做一些比较,它们共通的只有一点,就是解耦,三层架构指的是项目结构,一个项目可以搭建三层,加个IDAL 那就是四层了,也可以是N层,MVC只是 UI层里的一个设计模式,mvvm只是前端的一种设计模式,例如vue
我们这里就基于经典的三层,进行拓展,并说明彼此之间关系
先说DAL数据访问层,很多小伙伴喜欢用ADO.net来操作数据库,简单方便,手写sql简洁又高效,这方面进行封装的栗子也很多,先创建一个DAL层,然后Nuget找.net core里操作SQL SERVER的驱动,测试链接,再测试CRUD,测试通过,完美!
刚高兴了一秒,反过来想想,好像有点不对劲,我们部署的目标环境是Linux,Linux上面好像没听说谁用SQL SERVER,用MySQL的最多,难道再去找MySQL的驱动......如果项目需求变了,随便往表里删除几个字段,加几个字段,那估计要崩溃
如何兼容多种数据库?
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
来源:oschina
链接:https://my.oschina.net/u/4353634/blog/4003032