上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全;另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿。理想的方式是,web项目近引用接口而不引用实现,在配置文件中进行配置实现程序集合类,注入业务逻辑 ...
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全;另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿。理想的方式是,web项目近引用接口而不引用实现,在配置文件中进行配置实现程序集合类,注入业务逻辑层而不必注入数据访问层。
一、数据访问层
在项目中摒弃数据访问层或者使用EntityFramework作为数据访问层。
在项目中数据访问层主要实现数据的存储,仔细看一下EntityFramework发现DbContext的功能完全实现了查、增、删、改等各种操作,并且有缓存等功能,本身就实现了仓储模式,并且比自己封装的数据存储层的功能还强大,干脆在项目中用EntityFramework作为数据存储层。删除掉Ninesky.InterfaceDataLibrary项目和Ninesky.DataLibrary项目。
注:项目结构调整的确实太频繁了,以后一段时间内绝不再调整了。
二、实现业务逻辑层。
添加业务逻辑层接口项目Ninesky.InterfaceBase
1、添加接口基类接口InterfaceBaseService,添加基本的查、增、删、改方法
using Ninesky.Models;using System;using System.Linq;using System.Linq.Expressions;namespace Ninesky.InterfaceBase{ /// <summary> /// 服务基础接口 /// </summary> public interface InterfaceBaseService<T> where T:class { /// <summary> /// 添加 /// </summary> /// <param name="entity">实体</param> /// <param name="isSave">是否立即保存</param> /// <returns>添加的记录数</returns> int Add(T entity, bool isSave = true); /// <summary> /// 添加[批量] /// </summary> /// <param name="entities">实体</param> /// <param name="isSave">是否立即保存</param> /// <returns>添加的记录数</returns> int AddRange(T[] entities, bool isSave = true); /// <summary> /// 查询记录数 /// </summary> /// <param name="predicate">查询条件</param> /// <returns>记录数</returns> int Count(Expression<Func<T, bool>> predicate); /// <summary> /// 查询是否存在 /// </summary> /// <param name="predicate">查询条件</param> /// <returns>是否存在</returns> bool Exists(Expression<Func<T, bool>> predicate); /// <summary> /// 查找 /// </summary> /// <param name="Id">主键</param> /// <returns></returns> T Find(int Id); /// <summary> /// 查找 /// </summary> /// <param name="keyValues">主键</param> /// <returns></returns> T Find(object[] keyValues); /// <summary> /// 查找 /// </summary> /// <param name="predicate">查询条件</param> /// <returns></returns> T Find(Expression<Func<T, bool>> predicate); IQueryable<T> FindList<TKey>(int number, Expression<Func<T, bool>> predicate); /// <summary> /// 查询 /// </summary> /// <typeparam name="TKey">排序属性</typeparam> /// <param name="number">显示数量[小于等于0-不启用]</param> /// <param name="predicate">查询条件</param> /// <param name="keySelector">排序</param> /// <param name="isAsc">正序</param> /// <returns></returns> IQueryable<T> FindList<TKey>(int number, Expression<Func<T, bool>> predicate, Expression<Func<T, TKey>> keySelector, bool isAsc); /// <summary> /// 查询[分页] /// </summary> /// <typeparam name="TKey">排序属性</typeparam> /// <param name="predicate">查询条件</param> /// <param name="keySelector">排序</param> /// <param name="isAsc">是否正序</param> /// <param name="paging">分页数据</param> /// <returns></returns> Paging<T> FindList<TKey>(Expression<Func<T, bool>> predicate, Expression<Func<T, TKey>> keySelector, bool isAsc, Paging<T> paging); /// <summary> /// 查询[分页] /// </summary> /// <typeparam name="TKey">排序属性</typeparam> /// <param name="predicate">查询条件</param> /// <param name="keySelector">排序</param> /// <param name="isAsc">是否正序</param> /// <param name="pageIndex">当前页</param> /// <param name="pageSize">每页记录数</param> /// <returns></returns> Paging<T> FindList<TKey>(Expression<Func<T, bool>> predicate, Expression<Func<T, TKey>> keySelector, bool isAsc, int pageIndex, int pageSize); /// <summary> /// 删除 /// </summary> /// <param name="entity">实体</param> /// <param name="isSave">是否立即保存</param> /// <returns>是否删除成功</returns> bool Remove(T entity, bool isSave = true); /// <summary> /// 删除[批量] /// </summary> /// <param name="entities">实体数组</param> /// <param name="isSave">是否立即保存</param> /// <returns>成功删除的记录数</returns> int RemoveRange(T[] entities, bool isSave = true); /// <summary> /// 保存到数据库 /// </summary> /// <returns>更改的记录数</returns> int SaveChanges(); /// <summary> /// 更新 /// </summary> /// <param name="entity">实体</param> /// <param name="isSave">是否立即保存</param> /// <returns>是否保存成功</returns> bool Update(T entity, bool isSave = true); /// <summary> /// 更新[批量] /// </summary> /// <param name="entities">实体数组</param> /// <param name="isSave">是否立即保存</param> /// <returns>更新成功的记录数</returns> int UpdateRange(T[] entities, bool isSave = true); }}
原标题:.Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)
关键词:.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。