美文网首页
后端接口开发

后端接口开发

作者: 高调的小丑 | 来源:发表于2018-07-23 14:22 被阅读488次

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

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

    项目代码说明

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

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

    /// <summary>
    /// 获取收入支出表
    /// </summary>
    [RoutePrefix("api/BalanceSheet")]
    public class BalanceSheetController :ApiController
    {
        /// <summary>
        /// 不支持Get方法
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Get")]
        public string Get()
        {
            return "不支持";
        }
        
        /// <summary>
        /// 获取收支表所有数据
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Route("GetBalanceSheet")]
        public BasicResponse GetBalanceSheet()
        {
            returnAutofacExt.GetFromFac<BalanceSheetManageAp>().GetAllBalanceSheet();
        }
    }
    
    • [RoutePrefix("api/BalanceSheet")]表示我重新写了路由名,也可以去掉
    • 这边不支持Get方法(不建议使用Get)
    • [HttpPost]表示Post获取方式
    • [Route("GetBalanceSheet")]重写方法的路由,可去除直接使用方法名
      -return AutofacExt.GetFromFac<BalanceSheetManageApp>().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<BalanceSheetModel>(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<BalanceSheetModel>(BalaneShetModel.GetSql).FirstOrDefault();这句代码是将数据库中表BalanceSheet赋给了类BalanceSheetModel,采用了Dapper数据关系模型。附:Dapper入门

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

    相关文章

      网友评论

          本文标题:后端接口开发

          本文链接:https://www.haomeiwen.com/subject/ypodmftx.html