MVC+EF三层+抽象工厂
MVC+EF三层+抽象工厂项目搭建
注意:项目经过两次搭建,所以截图中顶级命名空间有ZHH和ZHH2区别,但是架构的内容是一样的,可以将ZHH和ZHH2视为同一命名空间
一:权限管理
二:搜索
|-Lucene.net(速度快)+盘古分词(搜索词拆分)---比模糊查询更模糊
|-模糊查询like效率慢,全盘扫描,不能拆分
盘古分词,分出来的词,用文件存在磁盘内 ,文件并发 ----lock锁->新的问题,效率慢,用户需要等待
生产者消费者模式---优化文件并发
*sesion只能在一台服务器存储信息
-进程外数据库中存session,性能差,没人用
分布式存储Session数据
1-Memcached 内存操作,速度快.
2-分布式文件(图片)存储
3.反向代理服务器:Nginx
4.WebService wcf
|-热词统计
三:工作流 WF
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
引用
子类
05WebApp
引用
MVC(测试略)
MVC+EF三层+抽象工厂的更多相关文章
- 转载——Asp.Net MVC+EF+三层架构的完整搭建过程
转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...
- Asp.Net MVC+EF+三层架构的完整搭建过程
架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...
- Asp.Net MVC+EF+三层架构
架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...
- MVC ---- EF三层代码
1.DAL层 using Night.Models; using System; using System.Collections.Generic; using System.Data.Entity. ...
- MVC与三层架构的区别
我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...
- MVC与三层架构
我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...
- 从MVC和三层架构说到SSH整合开发
相信很多人都认同JavaWeb开发是遵从MVC开发模式的,遵从三层架构进行开发的,是的,大家都这么认同.但是相信大家都会有过这样一个疑问,if(MVC三层模式==三层架构思想)out.println( ...
- MVC+Ef项目(3) 抽象数据库访问层的统一入口;EF上下文线程内唯一
抽象一个数据库访问层的统一入口(类似于EF的上下文,拿到上下文,就可以拿到所有的表).实际这个入口就是一个类,类里面有所有的仓储对应的属性.这样,只要拿到这个类的实例,就可以点出所有的仓储,我们在 R ...
- C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什
C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什么?如果要学我该从何学起??? C# 框架看这里http://download.csdn.net/source/25784 ...
随机推荐
- alpha阶段绩效考核
(按姓氏拼音顺序) (评分还考虑了从开题至今的博客.汇报等工作,但由于太杂乱没法列出) 陈修远 B+ 后端技术踩坑及代码编写 傅泳淦 A- Android端技术踩坑及代码编写 李浩冉 B 后端知识 ...
- Redis的备份与恢复
备份 dump.rdb:RDB方式的备份文件 appendonly.aof:AOF方式的备份文件 rdb 备份处理 # 编辑redis.conf文件,找到如下参数,默认开启. save 900 1 s ...
- C51的关键字解释
参考原文 https://www.cnblogs.com/tianqiang/p/9251486.html [存储种类] 数据类型 [存储器类型] 变量名 [_at_] [地址]: _at_ 地址定位 ...
- go语言从例子开始之Example24.通道同步
我们可以使用通道来同步 Go 协程间的执行状态.这里是一个使用阻塞的接受方式来等待一个 Go 协程的运行结束. Example: package main import "fmt" ...
- 判断Xen虚拟机随想
kvm xen虚拟化技术 剑桥大学开发,vmware visualbox windows下检测是否安装,注册表读取安装路径 linux下检测是否安装 rpm -qa 列出 判断软件包是否安装,rpm ...
- webpack 学习4 使用loader 以及常用的一些loader
webpack本身只支持处理JavaScript,其他的文件,如css img less是不识别的,所以才会有loader这个东西,它就是可以使webpack能够处理其他非js文件的拓展程序 首先我们 ...
- string.format()详解
java中: 从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 format().这个方法到现在用的人还是不多,实在是一种浪费.本文带你快速过一遍这个方法的功能,将来你要用 ...
- get和post 两种基本请求方式的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- 【leetcode】1001. Grid Illumination
题目如下: On a N x N grid of cells, each cell (x, y) with 0 <= x < N and 0 <= y < N has a la ...
- 【集群】Redis的哨兵模式和集群模式
哨兵模式 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障 ...