DDD实战5 实现上下文服务

通过服务来协调领域对象,来添加产品用例。

1.要实现产品上下文的服务,首先新建一个项目,在Product解决方案文件夹下面新建一个项目,项目的名称为:Product.AppSrv。

2.这个项目首先引用Product.Domain项目,因为它操作领域对象,所以还要引用DDD.Repositories(为什么不取名Product.Repository呢,因为这个项目的初衷是放置所有的仓储实现,我们之前在里面定义了ProductRepositories文件夹)。

因为它还要用到Util项目里面的东西,所也引用Util项目。

3.当添加一个产品的spu的时候,不会传入形如 public ProductSPU CreateProductSPU(Guid id,string spuname,string spudesc,List<ProductSKU> productskus) 里面的 List<ProductSKU>参数

因为应用服务是给webapi使用的,所以前段不会传入这样的对象,前端只会传入一些基本类型。

所以在此我们要创建Dtos文件夹,在此文件夹中再创建两个文件夹 分别命名InputDtos和OutputDtos。

在InputDtos文件夹下面新建AddProductSPUDto.cs

1public class AddProductSPUDto 2 { 3 public string SPUName { get; set; } 4 5 public string SPUDesc{ get; set; } 6 public List<string> SKUSpecs { get; set; } 7 public List<string> SKUUnits { get; set; } 8 9 public List<decimal> SKUDealerPrices { get; set; } 10 public List<byte[]> SKUImages { get; set; } 11 12 public List<decimal> PVs { get; set; } 13 14 }

 4.添加用例,AddProductSPUUseCase.cs

1public class AddProductSPUUseCase:BaseAppSrv 2 { 3 private readonly IRepository irepository; 4 private readonly IProductRepository iproductrepository; 5 6 public AddProductSPUUseCase(IRepository irepository, IProductRepository iproductrepository) 7 { 8 this.irepository = irepository; 9 this.iproductrepository = iproductrepository; 10 } 11 12 public ResultEntity<bool> AddProduct(AddProductSPUDto addProductSPUDto) 13 { 14 var productspuid = Guid.NewGuid(); 15 var productskus = new List<ProductSKU>(); 16 for (int i = 0; i < addProductSPUDto.SKUUnits.Count; i++) 17 { 18 ProductSKU sKU = new ProductSKU().CreateProductSKU(addProductSPUDto.SPUName, productspuid, addProductSPUDto.SKUImages[i], addProductSPUDto.SKUDealerPrices[i] 19 , addProductSPUDto.PVs[i], addProductSPUDto.SKUUnits[i], addProductSPUDto.SKUSpecs[i]); 20 productskus.Add(sKU); 21 } 22 var productspu = new ProductSPU().CreateProductSPU(productspuid, addProductSPUDto.SPUName, addProductSPUDto.SPUDesc, productskus); 23 24 try 25 { //使用这个混蛋是因为它实现了Idisposeable接口 26 using (irepository) 27 { 28 iproductrepository.CreateProduct(productspu); //在实际的使用中,我们这里的Commit 是通过DDD.DomainBase里面的EFCoreRepository.cs来实现的,后者实现了IRepository。 //所以说,我们注入IRepository 和 IProductRepository 的context必须是同一个context 29 irepository.Commit(); 30 } 31 return GetResultEntity(true); 32 33 } 34 catch (Exception ex) 35 { 36 37 throw ex; 38 } 39 } 40 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

DDD实战5 实现上下文服务 - HelloWorld