你的位置:首页 > 软件开发 > ASP.net > .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)

.Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)

发布时间:2016-12-27 00:00:14
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全;另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿。理想的方式是,web项目近引用接口而不引用实现,在配置文件中进行配置实现程序集合类,注入业务逻辑 ...

上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全;另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿。理想的方式是,web项目近引用接口而不引用实现,在配置文件中进行配置实现程序集合类,注入业务逻辑层而不必注入数据访问层。

一、数据访问层

在项目中摒弃数据访问层或者使用EntityFramework作为数据访问层。

在项目中数据访问层主要实现数据的存储,仔细看一下EntityFramework发现DbContext的功能完全实现了查、增、删、改等各种操作,并且有缓存等功能,本身就实现了仓储模式,并且比自己封装的数据存储层的功能还强大,干脆在项目中用EntityFramework作为数据存储层。删除掉Ninesky.InterfaceDataLibrary项目和Ninesky.DataLibrary项目。

注:项目结构调整的确实太频繁了,以后一段时间内绝不再调整了。

二、实现业务逻辑层。

添加业务逻辑层接口项目Ninesky.InterfaceBase

1、添加接口基类接口InterfaceBaseService,添加基本的查、增、删、改方法

.Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续).Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)
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 (#换成@)。