.net core進階之項目架構


在學習了.net core基礎之后就需要對這些知識靈活運用了,代碼不會寫那么很簡單,谷歌、必應、百度,總有一個能搜到的嘛,那么架構上的,似乎很少有這方面的資料,而且是在國內.net core資料本來就少的情況下,那我在這里就給大家分享一個架構,不管是.net core還是.net framework都可以用這個架構的:

 

 想必有很大一部分人寫代碼是這樣寫的吧,每一個方法中去new一個bll對象出來,也可以在方法外部實例化這個對象,不管項目中服務層是叫BLL還是叫Service,其實都是同一個東西,如果分的再細一點的話,會有一個IBLL或者IService出現,當然這個在一些中小項目中用不到,而我要說的方式並不是這樣,請看下面

 

 這個Service是什么東西呢?再看

 這樣似乎就很好理解了吧,可能有人會說,為啥要靜態的呢?那這里我來告訴大家,因為這個T類我是用來操作數據庫的一個類,既然是操作數據庫的,那么就需要釋放這個對象,什么時候釋放呢?我的做法是在請求結束返回結果前釋放這個對象

 

 因為每一個請求都是一個實例,請求結束的方法在過濾器中,而我並不可能在這里面去實例化一個BaseController,那么就需要將釋放數據庫實例的方法做成靜態的,這樣就可以直接調用了,或許又有人會說,這樣不是耦合起來了嗎?沒錯,是耦合了,但這個耦合並不涉及到業務的,都是同一層的兩個類有一點小小的耦合罷了,相比於每個控制器都需要去實例化數據庫操作對象的方式,我更喜歡用前者,不管是代碼量還是架構方面。或許還有人說,你這種只適用於單業務的,也就是一個控制器只操作一張數據庫表,那要有多個怎么辦呢?我的解決方案是:在Service層中讓他們自己耦合,不在web層做這種耦合

 

當然還有一種方式,那就是:依賴注入

在學習.net core的時候,了解到著名框架ABP,看了里面的代碼發現,它的業務層就是通過注入的方式傳到web層的。請看

 

 

我個人覺得沒必要用這種方式,我覺得注入的方式用於變化的需求,比如,有一個需求是數據庫不定,也就是切換數據庫,在controller的構造函數中傳入一個對象,這個對象可能是sqlserver的,也可能是mysql的,還可能是Oracle的,那這個時候用注入的方式就很好了,需要切換的時候只是在注入的地方變化一下就好了,controller中的代碼不需要任何變化,再或者說,有一個cache的controller,可能是管理redis的也可能是memcahe的,還可能是httpruntime的,這里用注入也是一樣的道理,只需要變化一個地方就可以輕松實現切換了

 

如果你們有更好的方法歡迎留言評論🙂


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM