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

最新文章

  1. css实现小三角(原理)
  2. xcode6 beta 中智能提示(自动完成)功能有时不显示的问题
  3. Spark 自定义累加变量(Accmulator)AccumulatorParam
  4. 简述jpg。Gif。png-8.png-24的区别,分别使用场景
  5. 自罚一杯-PHP基础(一)
  6. Visual Studio 2010: 调试引用的dll的代码?
  7. VC6.0 error LNK2001: unresolved external symbol _main解决办法
  8. 【练习】如何显示本地主机上的MySQL客户机版本
  9. Qt-4.6动画Animation快速入门三字决
  10. ubuntu phone/touch的源码从哪里下载?
  11. [C#]使用Label标签控件模拟窗体标题的移动
  12. ThinkCMF的跳转303 404等页面的方法
  13. testlib.h从入门到入坟
  14. 权限管理——shiro
  15. Kafka实战-简单示例
  16. 八、自定义starter
  17. _itemmod_day_limit
  18. binlog开启和查看
  19. js弹出div层,弹出层页面底部出现UL出现一条线问题
  20. (转)浅谈AIX下IPFilter防火墙

热门文章

  1. linux随笔-02
  2. Codeforces 1195E OpenStreetMap 单调队列套单调队列
  3. 十、设计模式之代理(Proxy)模式
  4. Java高级应用(一)
  5. vue.config.js配置前端代理
  6. 怀旧浪潮来袭,小霸王游戏、windows95......曾经的经典哪些能戳中你的心怀?
  7. PHP curl_multi_strerror函数
  8. hdu 6134 Battlestation Operational (莫比乌斯反演+埃式筛)
  9. 2019 牛客暑期多校 G subsequence 1 (dp+组合数)
  10. [MySQL] innobackupex在线备份及恢复(全量和增量)