后端接口开发

简单了解什么是领域驱动模型

代码框架
  • 接口这边是表现层,主要是放对外的东西,也就是向用户展示的内容。
  • 应用层:该层不包含任何领域逻辑,它主要用来对任务进行协调,它构建了表现层和领域层的桥梁。
  • 基础结构层:该层专为其他各层提供各项通用技术框架支持。像一些配置文件处理、缓存处理,事务处理等。
  • 领域层:业务所涉及的领域对象(包括实体、值对象)、领域服务等。该层就是所谓的领域模型。我们尽量把业务都放在该层。
领域驱动分层

项目代码说明

以接口http://localhost:8995/api/BalanceSheet/GetBalanceSheet来说明

BalanceSheet表示控制器名,通常相应的控制器名称为:BalanceSheetController;
GetBalanceSheet表示方法名

/// 
/// 获取收入支出表
/// 
[RoutePrefix("api/BalanceSheet")]
public class BalanceSheetController :ApiController
{
    /// 
    /// 不支持Get方法
    /// 
    /// 
    [HttpGet]
    [Route("Get")]
    public string Get()
    {
        return "不支持";
    }
    
    /// 
    /// 获取收支表所有数据
    /// 
    /// 
    [HttpPost]
    [Route("GetBalanceSheet")]
    public BasicResponse GetBalanceSheet()
    {
        returnAutofacExt.GetFromFac().GetAllBalanceSheet();
    }
}
  • [RoutePrefix("api/BalanceSheet")]表示我重新写了路由名,也可以去掉
  • 这边不支持Get方法(不建议使用Get)
  • [HttpPost]表示Post获取方式
  • [Route("GetBalanceSheet")]重写方法的路由,可去除直接使用方法名
    -return AutofacExt.GetFromFac().GetAllBalanceSheet();这句代码是使用了AutoFac实现控制反转,从而达到上下层解耦,且消除了类的依赖性。这边我使用的是构造函数注入,还可以用构造器注入等方式。附:AutoFac的使用

App层代码说明

private BalanceSheetService _balanceSheetService;

publicBalanceSheetManageApp(BalanceSheetServicbalanceSheetService)
{
    _balanceSheetService =balanceSheetService;
}
//通过构造函数,将接口注入到App层,之后会采用同样的方式来关联领域层和基础设施层

public BasicResponse GetAllBalanceSheet()
{
    BasicResponse response =newBasicResponse();
    try
    {
        var obj=_balanceSheetService.GetAllBalancehee();
        //跳转到方法
        if (obj != null)
            response.PostData = obj;
        else
        {
            response.RtnCode=(int)ReturnedCodeEnum.未查询到据;
            response.ErrorMsg=ReturnedCodeEnum.未查询到数据.oSting();
        }
    }
    catch (Exception ex)
    {
        response.RtnCode=(int)ReturnedCodeEnum.查询失败;
        response.ErrorMsg = ex.Message;
    }
    return response;
}
领域层代码

在领域层这边做业务逻辑处理,目前案例这边不需要处理逻辑,就不做说明了。

业务实现接口
public BalanceSheet GetBalanceSheet()
{
    var model=_sqlClient.Query(BalaneShetModel.GetSql).FirstOrDefault();
    if (model == null)
        return null;
        
    return new BalanceSheet()
    {
        BSh_ID = model.BSh_ID,
        BSh_TimeStame = model.BSh_TimeStame,
        BSh_Time = model.BSh_Time,
        BSh_AccountBookid=model.BSh_AccountBookid,
        BSh_Content = model.BSh_Content,
        BSh_payerid = model.BSh_payerid,
        BSh_payeeid = model.BSh_payeeid,
        BSh_Amount = model.BSh_Amount,
        BSh_Litigant = model.BSh_Litigant,
        BSh_Remarks = model.BSh_Remarks,
        BSh_Certificates =model.BSh_Certificates,
        BSh_classA = model.BSh_classA,
        BSh_classB = model.BSh_classB,
        BSh_classC = model.BSh_classC,
        BSh_Status = model.BSh_Status,
        BSh_order = model.BSh_order
    };
}

这边是接口的实现,也就是基础层对数据的获取。

  • var model=_sqlClient.Query(BalaneShetModel.GetSql).FirstOrDefault();这句代码是将数据库中表BalanceSheet赋给了类BalanceSheetModel,采用了Dapper数据关系模型。附:Dapper入门

另外各层级里都用对应的model,这边是用了Automapper来进行映射的。附:AutoMapper入门

你可能感兴趣的:(后端接口开发)