MVC+EF三层+抽象工厂项目搭建
注意:項目經(jīng)過兩次搭建,所以截圖中頂級命名空間有ZHH和ZHH2區(qū)別,但是架構的內(nèi)容是一樣的,可以將ZHH和ZHH2視為同一命名空間
?
一:權限管理
?
二:搜索
|-Lucene.net(速度快)+盤古分詞(搜索詞拆分)---比模糊查詢更模糊
|-模糊查詢like效率慢,全盤掃描,不能拆分
盤古分詞,分出來的詞,用文件存在磁盤內(nèi)?,文件并發(fā)?----lock鎖->新的問題,效率慢,用戶需要等待
生產(chǎn)者消費者模式---優(yōu)化文件并發(fā)
把分詞放在隊列中(內(nèi)存集合中),Redis分布式隊列
*sesion只能在一臺服務器存儲信息
-進程外數(shù)據(jù)庫中存session,性能差,沒人用
分布式存儲Session數(shù)據(jù)
1-Memcached?內(nèi)存操作,速度快.
?
2-分布式文件(圖片)存儲
3.反向代理服務器:Nginx
4.WebService??wcf
?
?
|-熱詞統(tǒng)計
?
三:工作流?WF
?
?
項目框架:三層+抽象工廠+spring.Net?
?
?01IDao層
引用Model層,接口規(guī)范,查詢返回IQueryable<T>,延遲加載,調(diào)用才會去生成查詢,優(yōu)化性能
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實現(xiàn)IDao中的接口規(guī)范,因為涉及具體數(shù)據(jù)庫操作,so,引用EF組件
Dao層引用EntityFramework組件
?
引發(fā)問題:再一次請求內(nèi)不能多次創(chuàng)建上下文實例
單例模式:控制對象在整個應用程序周期內(nèi)只有一份,
單例雖然可以解決,但是新的問題
,當前應用程序所有的用戶都用同一個對象,并且追加數(shù)據(jù)操作到上下文對象中,會導致內(nèi)存占用越來越大,難以釋放
?
每次請求創(chuàng)建一個EF上下文實例,(線程內(nèi)唯一)
當請求結束釋放??
HttpContext?是一個線程內(nèi)唯一對象
?
在Dao層定義DBContextFactory.cs(定義在Dao層,防止循環(huán)引用)上下文工廠
?
以上專業(yè)寫法
CallContext是HttpContext.Items內(nèi)部對象(線程內(nèi)唯一)
?
由于所有的DAO都實現(xiàn)了CRUD,so,封裝一個基類BaseDao.cs,并使用上下文工廠類創(chuàng)建對象
?
重點是DbSet<T>的使用
Dao層子類繼承超類,并實現(xiàn)IUserInfoDao接口
?
?
DAO和BLL直接需要通信,so,新建一個會話層(工廠),目的是解耦合
定義一個利用反射的抽象工廠DAOAbsFactory.cs反射
在Bll層中調(diào)用工廠類,以接口類型返回dao層的實例,降低Bll層和Dao層耦合度
抽象工廠類----數(shù)據(jù)會話層
抽象工廠(反射)??業(yè)務層與數(shù)據(jù)訪問層解耦
-只需要改配置文件,就可以切換dao層
?
抽象工廠引用程序集
?
?
?
創(chuàng)建會話類實現(xiàn)Idao中的會話接口
?
?
有了會話層之后,新建一個會話工廠(內(nèi)部涉及到EF操作,線程內(nèi)唯一)
DBSessionFactory.cs
?
?
03IBLL
引用
?
封裝IBLL層接口超類
?
子接口繼承
?
?
04BLL
引用
?
?
封裝BLL公共超類
?
?
子類
?
?
05WebApp
引用
?
MVC(測試略)
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhhsdn/p/4794865.html
總結
以上是生活随笔為你收集整理的MVC+EF三层+抽象工厂项目搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 主流的java编译器_程序猿专用十大在线
- 下一篇: C++中#define用法