在上一篇我们知道,要解除BLL对DAL的依赖,我们就必须抽象出DAL层的接口,同时基于DAL的数据访问技术很多,如EF,ADO.NET,LINQ TO SQL,因此,我们的数据访问层必须对这些技术提供相应的支持。所以今天我们要做的事情有两件,第一,定义我们的数据访问层接口;第二,屏蔽各类数据库访问技术的差异,提供统一的数据库访问模型。举个例子,我们只需要修改一下我们的配置文件,就能够把ADO.NET的实现方式,改变成EF的实现方式。好下面搭建我们的三层构,如图:

企业级应用架构(二)三层架构之数据访问层的封装与抽象

 

     项目的框架与上一篇基本一致。项目的引用关系: StructUI->Common,Model,BLL; BLL -> Model,IDAL,Common,Factory;DAL->  IDAL,Model。再次提醒各位,我们在BLL层并没有引用DAL,我们不能创建(new)DAL层的任何实体。

 

    下面,我们来定义DAL层的接口。定义层次的接口其实是一件很复杂的事情,首先,我们必须抽象出该层内所有对象有的属性与行为。对于数据访问层的对象,很明显增删改查是肯定走不掉的。其次我们必须充分的考虑,数据访问层各类技术对该接口的实现难度,技术上没法实现的接口,肯定是没有任何意义的。本文仅当示范作用,所以暂时我定义的接口会很简单,在后续的章节,我会抽象出一套完备的数据接口。该层的任何实体,都具备增删改查功能,所以我们首先定义该层的全局接口IDALBase<T>,即任何数据访问实体,都应该实现的接口,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IDAL
{
    public interface IDALBase<T> where T : class
    {
        /// <summary>
        /// 向T对应的数据表插入
        /// 一条数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns>true:成功,false:失败</returns>
        bool Insert(T entity);
        /// <summary>
        /// 修改数据表中与entity
        /// 实体对应的记录
        /// </summary>
        /// <param name="entity"></param>
        /// <returns>true:成功,false:失败</returns>
        bool Update(T entity);
        /// <summary>
        /// 删除数据表中与entity
        /// 实体对应的记录
        /// </summary>
        /// <param name="entity"></param>
        /// <returns>true:成功,false:失败</returns>
        bool Delete(T entity);
        /// <summary>
        /// 查询数据库表中指定的ID
        /// 的记录
        /// </summary>
        /// <param name="ID">标识ID</param>
        /// <returns>指定ID记录对应的实体</returns>
        T Query(int ID);
    }
}
View Code

相关文章:

  • 2021-07-31
  • 2021-05-01
  • 2022-12-23
  • 2021-04-16
  • 2021-09-27
  • 2021-07-03
  • 2021-08-08
  • 2021-08-14
猜你喜欢
  • 2022-12-23
  • 2022-02-22
  • 2021-06-05
  • 2022-12-23
  • 2021-05-03
  • 2021-11-01
  • 2022-12-23
相关资源
相似解决方案