MVC三层架构搭建
项目主要是用三层来搭建项目,三层分为表现层,数据层和业务层。项目用了目前比较流行的IOC架构。目前流行的IoC 框架有AutoFac,Unity,Spring.NET等,项目中选用Spring.NET来搭建三层。
IOC简单介绍
IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection)IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。网上有好多关于IOC介绍的文章,可以在网上查找关于IOC的知识。
三层搭建图
开始项目搭建
使用模块表为例,来搭建。表结构如下
解决方案项目设计:
1.新建一个空白解决方案名称为YCUniverse
2.在该解决方案下,新建解决方案文件夹业务层,网站层,数据层,业务层,基础层
3.网站层里面添加ASP.NET Web应用程序,项目选用MVC
4.数据层分为新建YCUniverse.DAL,YCUniverse.IDAL,YCUniverse.DALFactory类库
5.业务层分别新建YCUniverse.BLL,YCUniverse.IBLL类库
6.基础层新建YCUniverse.Model类库和YCUniverse.Ioc类库
建好后结构如下
基础层搭建
YCUniverse.Model作为实体类库,将EF模型实体添加到YCUniverse.Model类库
右键单击YCUniverse.Model类库=>添加=>新建项
选择好之后点击添加按钮
点击下一步进入下一步配置
点击完成按钮 完成EF的引用
将YCUniverse.Model类库中的App.Config 中链接数据库字符串复制到WebAppl网站Web.config文件中
数据层配置
YCUniverse.IDAL 类库添加YCUniverse.Model引用
在项目中每一张表都会涉及到查询,新增,删除,编辑,分页等操作,要是每一张表都要新建查询,删除,编辑,分页的方法,这样会增加项目开发时间和产生重复的代码。
解决方法将重复用到的方法封装成一个父类,当子类用到这些方法时可以继承父类。
1.新建父接口的类 名称为IBaseRepository.cs
public interface IBaseRepository<T> where T : class, new() { /// <summary> /// 查询 /// </summary> /// <param name="whereLambda"></param> /// <returns></returns> IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda); /// <summary> /// 添加 /// </summary> /// <param name="entity"></param> /// <returns></returns> T AddEntity(T entity); /// <summary> /// 编辑 /// </summary> /// <param name="entity"></param> /// <returns></returns> bool EditEntity(T entity); /// <summary> /// 删除 /// </summary> /// <param name="entity"></param> /// <returns></returns> bool DelEntity(T entity); /// <summary> /// 分页 /// </summary> /// <typeparam name="s"></typeparam> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="totalCount"></param> /// <param name="whereLambda"></param> /// <param name="orderByLambda"></param> /// <param name="IsAsc"></param> /// <returns></returns> IQueryable<T> LoadPageEntities<s>(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> whereLambda, Expression<Func<T, s>> orderByLambda, bool IsAsc); }
2.新建模块表接口类 名称为ItbMenuRepository.cs继承父类IBaseRepository
public interface ItbMenuRepository : IBaseRepository<tbMenu> { }
YCUniverse.IDAL 类库配置完成
YCUniverse.DAL类库开始配置
YCUniverse.DAL类库添加YCUniverse.Model,YCUniverse.IDAL,YCUniverse.Ioc和EF引用
1.新建EF上下类FactoryDBContext.cs
public class FactoryDBContext { /// <summary> /// 保证EF上下文实例是线程内唯一 /// </summary> /// <returns></returns> public static DbContext GetDBContext() { D