Software--电商平台--Module 5 Order & Payment
2018-01-10 14:11:30
电商平台 订购和支付 模块
一: 整体示意图
二:构建一个框架来处理 领域模型内部发生的事情--领域事件
- IDomainEvent 标识模型中的 DomainEvent
- IDomainEventHandler<T> where T : IDomainEvent 事件处理程序必须实现的接口。
- IDomainEventHandlerFactory 用来获取给定领域事件的处理程序的集合
- IEnumerableExtension 获取到 IDomainEventHandler 集合之后, 调用它们的处理方法并将领域事件作为动作的实参。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Agathas.Storefront.Infrastructure.Domain.Events
{
public static class IEnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (T item in source)
action(item);
}
} } - 静态类 DomainEvents -- 为了引发事件。
支持领域事件所需的框架。

二 : 领域对象
- Payment 值对象, 继承自 Infrastructure -- ValueObjectBase
- OrderItem 实体 继承自 EntityBase<int>
- 与OrderItem 相关联的 Order
EntityBase<int>
using System.Collections.Generic; namespace Agathas.Storefront.Infrastructure.Domain
{
public abstract class EntityBase<TId>
{
private List<BusinessRule> _brokenRules = new List<BusinessRule>(); public TId Id { get; set; } protected abstract void Validate(); public IEnumerable<BusinessRule> GetBrokenRules()
{
_brokenRules.Clear();
Validate();
return _brokenRules;
} protected void AddBrokenRule(BusinessRule businessRule)
{
_brokenRules.Add(businessRule);
} public override bool Equals(object entity)
{
return entity != null
&& entity is EntityBase<TId>
&& this == (EntityBase<TId>)entity;
} public override int GetHashCode()
{
return this.Id.GetHashCode();
} public static bool operator ==(EntityBase<TId> entity1,
EntityBase<TId> entity2)
{
if ((object)entity1 == null && (object)entity2 == null)
{
return true;
} if ((object)entity1 == null || (object)entity2 == null)
{
return false;
} if (entity1.Id.ToString() == entity2.Id.ToString())
{
return true;
} return false;
} public static bool operator !=(EntityBase<TId> entity1,
EntityBase<TId> entity2)
{
return (!(entity1 == entity2));
}
} }
ValueObjectBase
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Agathas.Storefront.Infrastructure.Domain
{
public abstract class ValueObjectBase
{
private List<BusinessRule> _brokenRules = new List<BusinessRule>(); public ValueObjectBase()
{
} protected abstract void Validate(); public void ThrowExceptionIfInvalid()
{
_brokenRules.Clear();
Validate();
if (_brokenRules.Count() > 0)
{
StringBuilder issues = new StringBuilder();
foreach (BusinessRule businessRule in _brokenRules)
issues.AppendLine(businessRule.Rule); throw new ValueObjectIsInvalidException(issues.ToString());
}
} protected void AddBrokenRule(BusinessRule businessRule)
{
_brokenRules.Add(businessRule);
}
}
}
Software--电商平台--Module 5 Order & Payment的更多相关文章
- 电商平台如何接入快递鸟电子面单API?
快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流.物流金融.在线下单等服务,解决电商的物流管理模块和金融模块.现就对快递鸟电子面单API做基本描述, ...
- 谈B2B电商平台与大数据
数据为王,服务为本——谈B2B电商平台与大数据 2013-06-27 11:10:41 作者:B2B行业资讯 标签: 大数据 ...
- Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载)
Java开源生鲜电商平台-财务系统模块的设计与架构(源码可下载) 前言:任何一个平台也好,系统也好,挣钱养活团队这个是无可厚非的,那么对于一个生鲜B2B平台盈利模式( 查看:http://www.cn ...
- Java开源生鲜电商平台-售后模块的设计与架构(源码可下载)
Java开源生鲜电商平台-售后模块的设计与架构(源码可下载) 说明:任何一个的电商平台都有售后服务系统,那么对于我们这个生鲜的电商平台,售后系统需要思考以下几个维度. 1. 买家的需求维度 说明:买家 ...
- Java生鲜电商平台-统一格式返回的API架构设计与实战
Java生鲜电商平台-统一格式返回的API架构设计与实战 说明:随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大 ...
- Java生鲜电商平台-订单模块状态机架构设计
Java生鲜电商平台-订单模块状态机架构设计 说明:在Java生鲜电商平台中订单的状态流转业务 我们知道 一个订单会有很多种状态:临时单.已下单.待支付.待收货.待评价.已完成,退货中等 ...
- Java生鲜电商平台-深刻理解电商的库存架构与解决方案
Java生鲜电商平台-深刻理解电商的库存架构与解决方案 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: 一.七大库存分类 首先得学习什么是库存, ...
- Java生鲜电商平台-物流配送的设计与架构
Java生鲜电商平台-物流配送的设计与架构 说明:由于Java开源生鲜电商平台是属于自建物流系统,也就是买家下的单,需要公司派物流团队进行派送. 业务需求中买家的下单时间控制在: ...
- Java生鲜电商平台-提现模块的设计与架构
Java生鲜电商平台-提现模块的设计与架构 补充说明:生鲜电商平台-提现模块的设计与架构,提现功能指的卖家把在平台挣的钱提现到自己的支付宝或者银行卡的一个过程. 功能相对而言不算复杂,有以下几个功能需 ...
- 从电商平台促销活动看电商app开发趋势
据亿合科技小编了解到:尽管各大电商平台都进入了品质和品牌时代,但对于消费者来说,低价依然是一个有吸引力的因素.尼尔森<网络购物者趋势研究>报告显示,2016年价格敏感型购物者的比例从15% ...
随机推荐
- C# 将Dll文件打包到exe中
首先在资源管理里面将需要使用的dll添加进入 然后将dll文件的生成操作改成嵌入的资源 然后新建一个类 LoadResourceDll.cs 1 using System; 2 using Syst ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- 【uboot 】uboot通过tftp下载内核
1.开发板uboot,虚拟机能相互ping通 2.ubuntu搭建好tftp服务器,设置好文件夹,放置好文件 sudo apt install tftpd-hpa //安装服务程序 sudo sys ...
- OM6621P系列国产M4F内核低功耗BLE5.1 SoC蓝牙芯片
随着5G与物联网时代到来,智慧城市.电动出行.智能家居.可穿戴设备等应用高速发展,低功耗蓝牙技术在近几年智能化浪潮中的地位也尤为重要.OM6621P系列的开发即是为解决国内低功耗蓝牙应用设计需求,其主 ...
- linux 安装简洁的 zsh
为什么要安装简洁的 zsh zsh 是 shell 中的佼佼者,但是网上配置 zsh的方案,千篇一律的都是配置的 oh-my-zsh,个人感觉非常臃肿,配置低的话,用起来还会非常卡. 安装 zsh 本 ...
- axios响应拦截器无法显示响应头问题
Access-Control-Expose-Headers 响应报头.跨域 公开响应头 问题现象: 前端无法获取响应头 Response Header 原因 问题原因:跨域问题 启用跨域请求(CORS ...
- 记录一次在deepin安装node版本管理工具nvm的过程
安装nvm sudo apt-get install git -y # 安装git cd /home # 随便找个目录放代码 git clone https://github.com/nvm-sh/n ...
- 提取可执行文件中的调试信息 objcopy --only-keep-debug app app.debug
https://blog.csdn.net/CaspianSea/article/details/17269977 set-debug-directory show-debug-directory i ...
- php框架之odp-环境部署安装
一.安装配置 1.安装很简单,创建安装目录,然后在linux上使用wget命令从获取地址下载,然后解压,最后在安装目录下执行bin/odp_install即可. 例如:(只是举例,请安装最新的版本) ...
- 修改、编辑pdf
Python 操作 PDF 会用到两个库,分别是:PyPDF2 和 pdfplumber 其中 PyPDF2 可以更好的读取.写入.分割.合并PDF文件,而 pdfplumber 可以更好的读取 PD ...