項目目標部署環境: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