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 ...
随机推荐
- AD中快速按模块摆放器件
AD中快速按模块摆放器件 在PCB布局的过程中,我们需要将元器件按照功能模块进行放置,如果一个一个去寻找则很麻烦,现在介绍一个快捷的方法: 1.首先在原理图中按照模块选中,然后快捷键 T+S跳转到PC ...
- Oracle之子查询:Top-N问题
学习了SQL子查询,遇到个Top-N问题,即:加入有张工资表(这里使用Oracle SCOTT用户的emp表),需要查找工资最高的3个员工信息,以下列格式输出: 乍眼一看,这很简单啊,对sal进行排序 ...
- docker 安装 jenkins 笔记
前提: 已安装好 docker-ce,可运行 docker 命令 命令: sudo docker pull jenkins mkdir -p ~/dockers/jenkins cd ~/docker ...
- 如何快速使用YOLO3进行目标检测
本文目的:介绍一篇YOLO3的Keras实现项目,便于快速了解如何使用预训练的YOLOv3,来对新图像进行目标检测. 本文使用的是Github上一位大神训练的YOLO3开源的项目.这个项目提供了很多使 ...
- 15.stop引发的数据不一致
/** * 数据不一致问题 * stop */ public class StopDemo { public static Student student = new Student(); publi ...
- eclipse中服务器找不到项目怎么解决
在我们运行项目前,都需要将项目部署到tomcat上,但是有时我们会遇到这种情况:项目明明存在,但是eclipse中tomcat的add and remove找不到项目,无法部署,那么这个问题该如何解决 ...
- pycharm windows 远程修改服务器代码
配置过程 本机环境 操作系统:win10 IDE:Pycharm 远程服务器 操作系统:ubuntu 4.4.0 配置了ssh,可以使用ssh进行远程登陆 配置Deployment 首先,在pycha ...
- PHP curl_multi_init函数
curl_multi_init — 返回一个新cURL批处理句柄 说明 resource curl_multi_init ( void ) 允许并行地处理批处理cURL句柄. 参数 此函数没有参数. ...
- hdu 3060 Area2 (计算几何模板)
Problem Description 小白最近又被空军特招为飞行员,参与一项实战演习.演习的内容还是轰炸某个岛屿(这次的岛屿很大,很大很大很大,大到炸弹怎么扔都能完全在岛屿上引爆),看来小白确实是飞 ...
- Android 发布自动版本号方案
以前看到一些自动化版本号打包的文章.如果您的项目是用 Git 管理的,并且恰巧又是使用 Gradle 编译(应该绝大部分都是这样的了吧?),本文试图找到一种更加优雅的自动版本管理方法. 背景 我们都知 ...