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

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

public class AddProductSPUDto
{
public string SPUName { get; set; } public string SPUDesc{ get; set; }
public List<string> SKUSpecs { get; set; }
public List<string> SKUUnits { get; set; } public List<decimal> SKUDealerPrices { get; set; }
public List<byte[]> SKUImages { get; set; } public List<decimal> PVs { get; set; } }

4.添加用例,AddProductSPUUseCase.cs

public class AddProductSPUUseCase:BaseAppSrv
{
private readonly IRepository irepository;
private readonly IProductRepository iproductrepository; public AddProductSPUUseCase(IRepository irepository, IProductRepository iproductrepository)
{
this.irepository = irepository;
this.iproductrepository = iproductrepository;
} public ResultEntity<bool> AddProduct(AddProductSPUDto addProductSPUDto)
{
var productspuid = Guid.NewGuid();
var productskus = new List<ProductSKU>();
for (int i = ; i < addProductSPUDto.SKUUnits.Count; i++)
{
ProductSKU sKU = new ProductSKU().CreateProductSKU(addProductSPUDto.SPUName, productspuid, addProductSPUDto.SKUImages[i], addProductSPUDto.SKUDealerPrices[i]
, addProductSPUDto.PVs[i], addProductSPUDto.SKUUnits[i], addProductSPUDto.SKUSpecs[i]);
productskus.Add(sKU);
}
var productspu = new ProductSPU().CreateProductSPU(productspuid, addProductSPUDto.SPUName, addProductSPUDto.SPUDesc, productskus); try
{
//使用这个混蛋是因为它实现了Idisposeable接口
using (irepository)
{
iproductrepository.CreateProduct(productspu);
//在实际的使用中,我们这里的Commit 是通过DDD.DomainBase里面的EFCoreRepository.cs来实现的,后者实现了IRepository。
//所以说,我们注入IRepository 和 IProductRepository 的context必须是同一个context
irepository.Commit();
}
return GetResultEntity(true); }
catch (Exception ex)
{ throw ex;
}
}
}

DDD实战5 实现上下文服务的更多相关文章

  1. DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)

    前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调 领域逻辑与仓储持久化. 首先大家需要明确的是,产品上下文 ...

  2. DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)

    从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...

  3. DDD实战进阶第一波(九):开发一般业务的大健康行业直销系统(实现经销商上下文仓储与领域逻辑)

    上篇文章主要讲述了经销商上下文的需求与POCO对象,这篇文章主要讲述该界限上下文的仓储与领域逻辑的实现. 关于界限上下文与EF Core数据访问上下文参考产品上下文相应的实现,这里不再累述. 因为在经 ...

  4. DDD实战进阶第一波(十四):开发一般业务的大健康行业直销系统(订单上下文应用服务用例与接口)

    上一篇文章我们主要讲了订单上下文的领域逻辑,在领域逻辑中完成了订单项的计算逻辑.订单的计算逻辑以及如何生成相应的实体code,这篇文章我们通过 在应用服务中实现一个下单的用例,来将这些领域逻辑以及仓储 ...

  5. DDD实战进阶第一波(十三):开发一般业务的大健康行业直销系统(订单上下文领域逻辑)

    前一篇文章主要讲了订单上下文的POCO模型,其中订单与订单项中有大量的值对象.这篇文章主要讲讲这些值对象以及订单项.订单相关的领域逻辑. 1.ProductSKUs值对象领域逻辑:ProductSKU ...

  6. DDD实战进阶第一波(十二):开发一般业务的大健康行业直销系统(订单上下文POCO模型)

    在本系列前面的文章中,我们主要讨论了产品上下文与经销商上下文相关的实现,大家对DDD的方法与架构已经有了初步的了解. 但是在这两个界限上下文中,业务逻辑很简单,也没有用到更多的值对象的内容.从这篇文章 ...

  7. DDD实战让中台和微服务的落地如虎添翼

    微服务到底怎么拆分和设计才算合理,拆多小才叫微服务?有没有好的方法来指导微服务和中台的设计呢? 深入DDD的核心知识体系与设计思想,带你掌握一套完整而系统的基于DDD的微服务拆分与设计方法,助力落地边 ...

  8. DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)

    要实现软件设计.软件开发在一个统一的思想.统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束. 虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍 ...

  9. DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)

    前面我们花了14篇的文章来给大家介绍经典DDD的概念.架构和实践.这篇文章我们来做一个完整的总结,另外生成一个Api接口文档. 一.DDD解决传统的开发的几大问题: 没有描述需求的设计模型:而是直接通 ...

随机推荐

  1. 在mac中导入hadoop2.6.0源代码至eclipse 分类: A1_HADOOP 2015-04-12 09:27 342人阅读 评论(0) 收藏

    一.环境准备 1.安装jdk.maven等 2.下载hadoop源代码,并解压 3.将tools.jar复制到Classes中,具体原因见http://wiki.apache.org/hadoop/H ...

  2. python爬虫(一)抓取 色影无忌图片

    原文地址: http://www.30daydo.com/article/56 由于平时爱好摄影.所以喜欢看看色影无忌论坛的获奖摄影作品,所以写了个小script用来抓取上面的获奖图片,亲自測试能够使 ...

  3. Android自定义组件系列【11】——实现3D立体旋转效果

    今天在网上看到一篇文章写关于Android实现3D旋转(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt2/inde ...

  4. js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)

    js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...

  5. Notepad++打开xml文件显示crlf的问题

    如图所示,显示CRLF,  CRLF其实是换行符. 所以在下图所示设置下显示行尾符不显示即可.

  6. Django---MVC设计模式

    把数据存储逻辑.业务逻辑和表现逻辑组合在一起的概念被称为软件架构的 Model-View-Controller (MVC)模式. 在这个模式中, Model 代表数据存层,View 代表的是系统中选择 ...

  7. Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单

    摘要: 转载请注明出处:http://blog.csdn.net/allen315410/article/details/42914501 概述        今天这篇博客将记录一些关于DrawerL ...

  8. Android 仿微信朋友圈点击图片变暗

    package cn.eoe.leigo.view; import android.content.Context; import android.graphics.Bitmap; import an ...

  9. 【t075】郁闷的记者

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 你是一个体育报社的记者,你接受到一个艰难的任务:有N支足球队参加足球比赛,现在给你一些比赛的结果,需要 ...

  10. 带你轻松看源代码---AsyncTask(异步任务)

    本文出自博客Vander丶CSDN博客,如需转载请标明出处,尊重原创谢谢 博客地址:http://blog.csdn.net/l540675759/article/details/62893318 写 ...