asp.net mvc 簡單項目框架的搭建(二)—— Spring.Net在Mvc中的簡單應用

来源:https://www.cnblogs.com/CherishTheYouth/archive/2018/10/08/CherishTheYouth_1008.html
-Advertisement-
Play Games

摘要:上篇寫瞭如何搭建一個簡單項目框架的上部分,講了關於Dal和Bll之間解耦的相關知識,這篇來把後i面的部分說一說。 上篇講到DbSession,現在接著往下講。 首先,還是把一些類似的操作完善一下,與Dal層相同,我們同樣可以把Bll層中某些使用廣泛的類似的操作封裝到基類中,另外,同樣要給Bll ...


摘要:上篇寫瞭如何搭建一個簡單項目框架的上部分,講了關於Dal和Bll之間解耦的相關知識,這篇來把後i面的部分說一說。

上篇講到DbSession,現在接著往下講。

首先,還是把一些類似的操作完善一下,與Dal層相同,我們同樣可以把Bll層中某些使用廣泛的類似的操作封裝到基類中,另外,同樣要給Bll層添加介面層。

下麵直接給出相應的代碼:

Bll層基類:

BaseService.cs

 1  public abstract  class BaseService<T> where T : class,new()
 2     {
 3         public IBaseDal<T> CurrentDal { get; set; }
 4 
 5         public IDbSession DbSession
 6         {
 7             get
 8             {
 9                 return DbSessionFactory.GetCurrentDbSession();
10             }
11         }
12 
13         public BaseService()
14         {
15             SetCurrentDal();
16         }
17 
18         public abstract void SetCurrentDal();//抽象方法:要求子類必須實現。
19 
20         public IQueryable<T> GetEntityByLambda(Expression<Func<T,bool>> wherelambda)
21         {
22             return CurrentDal.GetEntityByLambda(wherelambda);
23         }
24 
25 
26         public T AddEntity(T entity)
27         {
28             CurrentDal.AddEntity(entity);
29             DbSession.SaveChanges();
30             return entity;
31         }
32 
33         //刪除
34 
35         public bool DeleteEntity(T entity)
36         {
37             CurrentDal.DeleteEntity(entity);
38             return DbSession.SaveChanges() > 0;
39 
40         }
41         //
42         public bool UpdateEntity(T entity)
43         {
44             CurrentDal.UpdateEntity(entity);
45             return DbSession.SaveChanges() > 0;
46 
47         }
48     }

 

IBaseService.cs

1  public  interface IBaseService<T> where T : class,new()
2     {
3         IQueryable<T> GetEntityByLambda(Expression<Func<T, bool>> wherelambda);
4         T AddEntity(T entity);
5         bool DeleteEntity(T entity);
6         bool UpdateEntity(T entity);
7     }

 

IUserService.cs

1  public  interface IUserService:IBaseService<Users>
2  {
3 
4  }

 

UserService.cs

 1  public class UserService:BaseService<Users>,IUserService
 2     {
 3 
 4         //IUserDal userDal = AbstractFactory.GetUserDal();
 5         //IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();
 6         //public Users AddUser(Users user)
 7         //{
 8         //    dbSession.UserDal.AddEntity(user);
 9         //    dbSession.SaveChanges();
10         //    return user;
11         //}
12 
13         //public IQueryable<Users> GetUserByLambda(Expression<Func<Users,bool>> wherelambada)
14         //{
15         //    return dbSession.UserDal.GetEntityByLambda(wherelambada);
16         //}
17 
18         //public bool DeleteUser(Users user)
19         //{
20         //    dbSession.UserDal.DeleteEntity(user);
21         //    return   dbSession.SaveChanges() > 0;
22         //}
23 
24         //public bool UpdateUser(Users user)
25         //{
26         //    dbSession.UserDal.UpdateEntity(user);
27         //    return dbSession.SaveChanges() > 0;
28         //}
29 
30         //給父類的屬性賦值
31         public override void SetCurrentDal()
32         {
33             CurrentDal = this.DbSession.UserDal;
34         }
35     }

 

以上就是對Bll層的一些封裝和介面層的構建,現在在現有的代碼基礎上,我們來看一下,控制器對Bll層的常規調用:

下麵給一段簡短代碼:

HomeController => AddUser方法

 1  public  ActionResult  AddUser(FormCollection form)
 2  {
 3             Users user = new Users();
          //重點看這句,對Bll層的調用
4 IUserService userService = new UserService(); 5 user.UserName = form["name"]; 6 user.PassWord = form["pwd"]; 7 user.PhoneNumber = form["phone"]; 8 user.EMail = form["email"]; 9 userService.AddEntity(user); 10 if (user == null) 11 { 12 return View("Contact"); 13 } 14 else 15 { 16 return View("About"); 17 } 18 }

 

這是一段向資料庫中添加user信息的代碼,前端代碼省略了。

從這段代碼里我們可以看到,這裡Bll層和UI等的耦合度仍然非常的高,

IUserService userService = new UserService();

 

這一句跟前面講的Bll層調Dal層一樣,耦合度很高,那麼如何降低這個耦合度呢,再次使用工廠的方法嗎,不不不,那好像太麻煩了。
這裡就要用到一個新的知識點了———— spring.net (據說這個很牛逼,但我也不咋清楚,只能邊學邊寫了)。

 接下來說一下spring.net的使用方法和步驟:

1.在web.config中添加Spring.Net塊配置和Spring.Net容器配置節點

塊配置節點:

1  <!--Spring.Net塊配置-->
2     <sectionGroup name="spring">
3       <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
4     </sectionGroup>

容器配置節點

1   <!--Spring.Net 的容器的配置節點-->
2   <spring>
3     <context>
4       <resource uri="file://~/Config/controllers.xml"/>
5     </context>
6   </spring>

2.添加相關引用

首先,在程式目錄下的package文件夾新建 Spring.Net文件夾,然後導入如下文件:

導入如下文件:

 

 在Ui項目下添加引用:

3.更改global.aspx.cs文件

將 MvcApplication 由繼承 System.Web.HttpApplication 改為 Sring.Web.Mvc.SpringMvcApplication .

 4.在UI項目下新建Config文件夾,在文件夾中新建如下兩個配置文件:controller.xml 和 services.xml

controller.xml文件代碼如下:

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <objects xmlns="http://www.springframework.net">
 3 
 4   <!--<object></object>引用了幾個Service就寫幾個Service,此處只引用一個Service,所以只寫一個-->
 5   <!--type ="類的全名(命名空間名+類名),程式集名稱"-->
 6   <object type="IotPf.UI.Controllers.HomeController,IotPf.UI" singleton="false" >
 7     <property name="UserService" ref="UserService" />
 8     
 9   </object>  
10 </objects>

services.xml文件代碼如下:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <objects xmlns="http://www.springframework.net">
3 
4   <object name="UserService" type=" IotPf.Bll.UserService,IotPf.Bll" singleton="false" >
5   </object>
6 
7 </objects>

註意:在web.config中記得將services.xml的引用添加進來,並且要註意順序,先services.xml,後controller.xml

 

5. 然後我們回到HomeController中來:在其中添加屬性userService

 

 然後執行程式,發現會報如下錯誤:

此時,我們添加如下引用:

microsoft.aspnet.webapi

然後,再次執行程式:

運行結果無誤:

 

 這就是Spring.Net的使用步驟了。

通過使用Spring.Net,也達到了使UI層和Bll層解耦的目的,而且操作較之工廠的操作簡單的多。

 好了,一個簡單框架的第二部分,UI層和Bll層的解耦也完成了,關於框架搭建的這篇博客就寫到這裡啦。

 

我的email:[email protected]

如有謬誤,歡迎指正!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 二叉樹的深度: 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 思路: 1.非遞歸層序遍歷 2.使用輔助隊列,根結點先入隊列 3. 迴圈判斷隊列是否為空,如果不為空就繼續迴圈隊列裡面的每個結點 4. 迴圈隊列時,當前當前結點出... ...
  • 題目 一直沒有頭緒的一道題 明明只有普及-難度 看了看題解用的大多是方程和Fibonacci 於是更加懵逼了。。。 今天立志AC此題 結果用大模擬還真過了 說一下思路 然而並沒有思路 按照題意敲代碼 不妨設第二站上下車了k人 分別統計每一站a和k的繫數 1、2、n站特殊處理 然後求出k,代入x站中輸 ...
  • Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-f8IeEI/MYSQL-python/錯誤無法安裝python第三方庫需要安裝libmysqlclient-devapt-get inst... ...
  • 內容 本文對JDK1.7下使用segmentShift和segmentMask求解ConcurrentHashMap鍵值對在Segment[]中的下標值進行了探究和論證。 適合人群 ​ Java進階 說明 轉載請註明出處,尊重筆者的勞動成果。 推薦閱讀 探究HashMap線性不安全(二)——鏈表成環 ...
  • 題意 "題目鏈接" Sol 只要知道“迴文連續子串”就能做了吧。。 想要滿足這個條件,肯定是不能出現$aa$或$aba$這種情況 如果沒有$S$的限制,答案為$K (K 1) \prod_{i = 3}^n (k 2)$ 如果有$S$的限制就除一個$K$ 然而考場上沒註意到會乘爆long long於 ...
  • 主要內容:1. 模塊的簡單認識2. collections模塊3. time時間模塊4. random模塊5. os模塊6. sys模塊 一. 模塊的簡單認識什麽是模塊. 模塊就是我們把裝有特定功能的代碼進行歸類的結果. 從代碼編寫的單位來看我們的程式, 從小到大的順序: 一條代碼 < 語句句塊 < ...
  • 直接上代碼 HTML頁面代碼: controller.js代碼 webapi代碼: 有疑問歡迎交流。 ...
  • 現在的開發中越來越看重依賴註入的思想,微軟的 Asp.Net Core 框架更是天然集成了依賴註入,那麼在單元測試中如何使用依賴註入呢? 本文主要介紹如何通過 XUnit 來實現依賴註入, XUnit 主要藉助 SharedContext 來共用一部分資源包括這些資源的創建以及釋放。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...