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


摘要:上篇寫了如何搭建一個簡單項目框架的上部分,講了關於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:3074596466@qq.com

如有謬誤,歡迎指正!

 


免責聲明!

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



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