日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC+EF三层+抽象工厂

發布時間:2024/4/17 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(測試略)

轉載于:https://www.cnblogs.com/cenwenlin/p/9287075.html

總結

以上是生活随笔為你收集整理的MVC+EF三层+抽象工厂的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。