第一章 搭建一个通用的.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 ...
随机推荐
- 【Nginx系列】Nginx编译与安装
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器.Nginx是由Igor Sysoev为俄罗斯访问第二的Rambler.ru站点开发的. 一.Nginx ...
- MySQL之数据的insert-delete-update操作
主要是对数据的一些基本操作:增加.删除.修改
- 2018C程序设计—第0次作业
1.翻阅邹欣老师博客关于师生关系博客,并回答下列问题,每个问题的答案不少于500字 1)最理想的师生关系是健身教练和学员的关系,在这种师生关系中你期望获得来自老师的哪些帮助? 答:正如邹欣老师博客里所 ...
- 2017 清北济南考前刷题Day 3 afternoon
期望得分:100+40+100=240 实际得分:100+40+100=240 将每个联通块的贡献乘起来就是答案 如果一个联通块的边数>点数 ,那么无解 如果边数=点数,那么贡献是 2 如果边数 ...
- LeetCode题型分类及索引
目录 这是一个对LeetCode题目归类的索引,分类标准参考了July大神的<编程之法>以及LeetCode的tag项.分类可能还不太合理,逐步完善,请见谅~ 题主本人也在一点一点的刷题, ...
- Dojo API中文 Dojo内容模块概览,初学者
官网:http://dojotoolkit.org/reference-guide/1.10/dojo/index.html#dojo-dojo的翻译 dojo 内容: dojo dojo/dojo ...
- 新概念英语(1-143)A walk through the woods
Lesson 143 A walk through the woods 林中散步 Listen to the tape then answer this question. What was so f ...
- angular2 学习笔记 ( app initialize 初始化 )
refer : http://stackoverflow.com/questions/39033835/angularjs2-preload-server-configuration-before-t ...
- OpenID Connect + OAuth2.0
一.问题的提出 现代应用程序或多或少都是如下这样的架构: 在这种情况下,前端.中间层和后端都需要进行验证和授权来保护资源,所以不能仅仅在业务逻辑层或者服务接口层来实现基础的安全功能.为了解决这样的问题 ...
- restful架构风格设计准则(二)以资源为中心,一个url
读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 1.REST是一种架构风格,其核心是面向资源,简化设计,降低开发的复杂性 ...