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