MVC+EF三層+抽象工廠


MVC+EF三層+抽象工廠項目搭建

 

      注意:項目經過兩次搭建,所以截圖中頂級命名空間有ZHH和ZHH2區別,但是架構的內容是一樣的,可以將ZHH和ZHH2視為同一命名空間

      一:權限管理

      二:搜索

      |-Lucene.net(速度快)+盤古分詞(搜索詞拆分)---比模糊查詢更模糊

      |-模糊查詢like效率慢,全盤掃描,不能拆分

      盤古分詞,分出來的詞,用文件存在磁盤內 ,文件並發 ----lock鎖->新的問題,效率慢,用戶需要等待

      生產者消費者模式---優化文件並發

      把分詞放在隊列中(內存集合中),Redis分布式隊列

      *sesion只能在一台服務器存儲信息

      -進程外數據庫中存session,性能差,沒人用

      分布式存儲Session數據

      1-Memcached 內存操作,速度快.

      2-分布式文件(圖片)存儲

      3.反向代理服務器:Nginx

      4.WebService  wcf

      |-熱詞統計

      三:工作流 WF

      項目框架:三層+抽象工廠+spring.Net 

 

      01IDao層

      引用Model層,接口規范,查詢返回IQueryable<T>,延遲加載,調用才會去生成查詢,優化性能

      Expression--Lambda樹

      查詢:

      IQueryable<UserInfo> LoadEntities(Expression<Func<UserInfo,bool>>where);

      分頁:

      IQueryable<UserInfo> LoadPageEntities<Tkey>(int pageIndex, int pageSIze, out int totalCount, Expression<Func<UserInfo, bool>> where, Expression<Func<UserInfo, Tkey>> orderBy);

      增:

      UserInfo AddEntity(UserInfo entity);

      刪:

      bool DeleteEntity(UserInfo entity);

      改:

      bool UpdateEntity(UserInfo entity);

      由於每一個接口,都需要定義CURD,那么造成重復,so,封裝Base接口

 

      繼承基接口

 

      對外提供會話接口IDBSession

 

      02Dao層

 

      引用IDao層和Model層,Dao實現IDao中的接口規范,因為涉及具體數據庫操作,so,引用EF組件

      Dao層引用EntityFramework組件

      引發問題:再一次請求內不能多次創建上下文實例

      單例模式:控制對象在整個應用程序周期內只有一份,

      單例雖然可以解決,但是新的問題

      ,當前應用程序所有的用戶都用同一個對象,並且追加數據操作到上下文對象中,會導致內存占用越來越大,難以釋放

      每次請求創建一個EF上下文實例,(線程內唯一)

      當請求結束釋放  

      HttpContext 是一個線程內唯一對象

      在Dao層定義DBContextFactory.cs(定義在Dao層,防止循環引用)上下文工廠

 

      以上專業寫法

      CallContext是HttpContext.Items內部對象(線程內唯一)

      由於所有的DAO都實現了CRUD,so,封裝一個基類BaseDao.cs,並使用上下文工廠類創建對象

 

      重點是DbSet<T>的使用

      Dao層子類繼承超類,並實現IUserInfoDao接口

 

      DAO和BLL直接需要通信,so,新建一個會話層(工廠),目的是解耦合

      定義一個利用反射的抽象工廠DAOAbsFactory.cs反射

      在Bll層中調用工廠類,以接口類型返回dao層的實例,降低Bll層和Dao層耦合度

      抽象工廠類----數據會話層

      抽象工廠(反射)  業務層與數據訪問層解耦

      -只需要改配置文件,就可以切換dao層

 

      抽象工廠引用程序集

 

      創建會話類實現Idao中的會話接口

 

      有了會話層之后,新建一個會話工廠(內部涉及到EF操作,線程內唯一)

      DBSessionFactory.cs

 

      03IBLL

      引用

 

      封裝IBLL層接口超類

 

      子接口繼承

 

      04BLL

      引用

 

      封裝BLL公共超類

 

      子類

 

      05WebApp

      引用

 

      MVC(測試略)


免責聲明!

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



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