注意:项目经过两次搭建,所以截图中顶级命名空间有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(测试略)

转载于:https://www.cnblogs.com/zhhsdn/p/4794865.html

MVC+EF三层+抽象工厂项目搭建相关推荐

  1. MVC+EF三层+抽象工厂

    MVC+EF三层+抽象工厂项目搭建 注意:项目经过两次搭建,所以截图中顶级命名空间有ZHH和ZHH2区别,但是架构的内容是一样的,可以将ZHH和ZHH2视为同一命名空间 一:权限管理 二:搜索 |-L ...

  2. Spring mvc+ maven + MyBatis + Oracle + IDEA 项目搭建 - framework 进阶中(一)

    原文链接 http://blog.csdn.net/qq184377902/article/details/51493642 结合自身情况加以修改搭建的框架,记录以防备忘,方便日后学习参考. Befo ...

  3. 《三层架构之抽象工厂加反射》纠错

    每当别人问我关于三层的知识的时候我总是推荐自己的<三层架构之抽象工厂加反射>这篇博客.这篇博客是自己当时学习三层的时候写的一个简单的登录例子.这个例子通过登录这个用例简单的介绍了三层,然后 ...

  4. 模块内高内聚?模块间低耦合?MVC+EF演示给你看!

    前言 在软件项目开发过程中,我们总能听见"高内聚,低耦合",即使这种思想在我们学习编程的过程中就已经耳濡目染.可一旦当我们上项目,赶进度的时候我们就会"偷懒", ...

  5. MVC与三层架构区别

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...

  6. MVC三层+会话层+线程安全+抽象工厂+DataBase First的基础框架

    1.建立数据库OA,表UserInfo 2.创建类库项目以及mvc4 web项目 1)OA.Model 层:模型 2)OA.IDal 层 :数据接口 3)OA.Dal层 :数据实现 4)OA.IDBS ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MV ...

  8. 抽象工厂————三层架构

    抽象工厂作用:降低BLL和Model层耦合度 核心思想:1.通过接口类实现对象的分离   2.通过一个类,实现指定对象的创建,并且这个类通过配置文件决定获取哪个对象 这样只要调用一个接口和这个类,就能 ...

  9. Spring MVC + Mybatis项目搭建

    1.参考<Java Spring MVC项目搭建(一)--Spring MVC框架集成>配置spring mvc需要的jar包及eclipse配置(主要是针对servlet-api.jar ...

最新文章

  1. R 语言常用操作与函数汇总
  2. 关于IBM Lotus的JAVA代理进入jar包的说明
  3. Plan with Global Optimization
  4. Spring.Net官网翻译
  5. SD--RV_accounting_document_create函数的代码解读
  6. 数据结构一:链表(单向链表)
  7. wxWidgets:wxTreeEvent类用法
  8. 游戏市场阴影下的手游厂商,和他们无法触碰的未来
  9. 牛客网 【每日一题】7月24日题目精讲—小A的柱状图
  10. python接活网站_python能自己接活_python开发接活 - CSDN
  11. 华为云DevCloud为虚拟仿真插上互联网的翅膀
  12. css中的.clearfix是什么意思?
  13. python-next
  14. 安全知识、工具网址集锦(持续更新)
  15. 【电力电子技术DC-AC】三相SPWM逆变器Simulink仿真(设置死区时间)
  16. Java网络编程与NIO详解14:Tomcat 常见面试题汇总
  17. 绕过tp路由器管理密码_怎么用手机设置路由器?TPlink无线路由器安装设置方法...
  18. idea几款好用的插件
  19. “技术天才”李一男已出狱:曾被视为华为接班人!
  20. 人体骨骼关键点检测的算法

热门文章

  1. python测试开发django-44.xadmin上传图片和文件
  2. tomcat安装与项目部署
  3. Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作
  4. android ArcGIS学习笔记一
  5. [C#] Direct2D 学习笔记 (一)vb.net转换为c#
  6. c++调用dll动态链接库历程
  7. linux中mount -o remount /home,mount -o remount, rw / 很有用..
  8. 逻辑漏洞——验证机制问题
  9. 渗透测试报告封面样本
  10. python 文本相似度计算函数_四种计算文本相似度的方法对比