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三层+抽象工厂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三个值得期待的JavaScript新功能
- 下一篇: 李彦宏:AI在我有生之年不会毁灭人类