第一章 搭建一个通用的.net core项目框架
项目目标部署环境: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
第一章 搭建一个通用的.net core项目框架的更多相关文章
- 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目
在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...
- 第一章 搭建Qt开发环境
第一章 搭建Qt开发环境 1.到http://download.qt-project.org/archive/上下载Qt的源码包.我下载的是qt-everywhere-opensource-src-4 ...
- 第一章 第一个spring boot程序(转载)
第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html 环境: jdk:1.8.0_73 mave ...
- C#语言————第一章 第一个C#程序
第一章 第一个C#程序 ******************C#程序*************** ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...
- 搭建一个舒适的 .NET Core 开发环境
最近,一直在往.Net Core上迁移,随着工作的深入,发现.Net Core比.Net Framework好玩多了.不过目前还在windows下开发,虽然VisualStudio是宇宙第一神器,但是 ...
- 第一章 第一个spring boot程序
环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...
- 如何搭建一个基于nuxt.js的项目
介绍 nuxt.js(中文官方文档)是vue.js的一个通用型应用框架,有了之前搭建vue项目的过程之后,搭建一个nuxt项目就会十分简单. 搭建步骤 1.打开命令提示符,进入到相关文件夹下: 2.使 ...
- iOS通用的MVC模式项目框架MobileProject
最近项目比较不赶的情况下,决定把一些通用.常用的内容集成在一个项目框架中,意在新项目中可以快速搭建:其实经过几个项目后,总是有一些重复的创建工作,可以使用本项目的内容直接进行开发:采用的是MVC的分层 ...
- 2017.12.12 架构探险-第一章-从一个简单的web应用开始
参考来自:<架构探险>黄勇 著 1 使用IDEA搭建MAVEN项目 1.1 搭建java项目 (1)创建java项目 为了整个书籍的项目,我创建了一个工程,在这个工程里创建了每个章节的mo ...
随机推荐
- 新手立体四子棋AI教程(2)——价值评估函数
上一篇我们完成了整个程序的基础框架,那么在讲到真正的搜索算法前,我们先来看看五子棋如何评估当前局势,以及如何计算某个位置的价值. 一.五子棋 在五子棋中,包括成五,活三,活二等定势,下图为山东师范大学 ...
- SSH三大框架的整合
SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 1.4 Hibernate ...
- [BZOJ 4417][Shoi2013]超级跳马
4417: [Shoi2013]超级跳马 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 379 Solved: 230[Submit][Status ...
- 安装QT5.02
1.下载QT5 SDK 下载地址:http://qt-project.org/downloads. 2.安装QT5 下载完后,假设放在Download/,切换到该目录,输入:./qt-linux-op ...
- ExecutorService实际上是一个线程池的管理工具
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用 Thread的start()更好.在新特征 ...
- 利用python 创建XML文件
#coding=utf-8 from xml.etree import ElementTree import pdb def printNodeInfo(node): #node.tag 标签名称 # ...
- Scala 快速入门
 Scalable 编程语言 纯正的的面向对象语言 函数式编程语言 无缝的java互操作 scala之父 Martin Odersky 1. 函数式编程 函数式编程(functional progr ...
- Vue filter介绍及详细使用
Vue filter介绍及其使用 VueJs 提供了强大的过滤器API,能够对数据进行各种过滤处理,返回需要的结果. Vue.js自带了一些默认过滤器例如: capitalize 首字母大写 uppe ...
- javascript实现小鸟飞行轨迹
javascript实现小鸟飞行轨迹 代码如下:
- vue mint-ui 三级地址联动
我也是第一次写这种地址联动的 刚开始的时候 我还以为直接用select来写 后来公司的ios告知并不是这样的 他说应该时这样的 于是第一想法 赶紧找插件吧 但是找了一会未果 就问了公司大神 他刚开始 ...