码迷,mamicode.com
首页 > Web开发 > 详细

MVC+EF三层+抽象工厂

时间:2018-07-10 11:08:58      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:mode   上下文   class   服务器   用户   重点   ota   mys   express   

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(测试略)

MVC+EF三层+抽象工厂

标签:mode   上下文   class   服务器   用户   重点   ota   mys   express   

原文地址:https://www.cnblogs.com/cenwenlin/p/9287075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!