上篇文章主要讲述了经销商上下文的需求与POCO对象,这篇文章主要讲述该界限上下文的仓储与领域逻辑的实现。

关于界限上下文与EF Core数据访问上下文参考产品上下文相应的实现,这里不再累述。

因为在经销商上下文中有两个聚合,一个是经销商聚合,一个是登录聚合,所以我们需要实现两个仓储接口:

1.经销商仓储接口定义:

 public interface IDealerRepository
{
void CreateDealer<T>(T dealer) where T : class, IAggregationRoot;
//获取上级经销商(当前代注册经销商)的层次结构
int GetParentDealerLayer(Guid dealerid);
//将上级经销商(代注册经销商)的子个数加一
void AddParentSubCount(Guid? parentdealerid);
//减去父进销商的电子币(用于注册和下单时,扣减经销商的电子币)
void SubParentEleMoney(Guid parentdealerid, decimal subelemoney);
//下订单时,增加经销商的PV
void AddDealerPV(Guid dealerid, decimal orderpv); }

2.登录仓储接口定义:

 public interface ILoginRepository
{
void CreateLogin<T>(T login) where T : class, IAggregationRoot;
Guid UserLogin(string tel, string password);
}

3.具体对应的仓储实现在仓储实现的项目中自己实现,主要通过EF Core完成数据库的访问与操作。

4.经销商聚合中联系人对象的领域逻辑实现:

public partial class Contact
{
public Contact CreateContact(Guid dealerid,string name,string tel,string province,string city,
string zero,string street,int isdefault)
{
this.Id = Guid.NewGuid();
this.DealerId = dealerid;
this.ContactName = name;
this.ContactTel = tel;
this.Province = province;
this.City = city;
this.Zero = zero;
this.Street = street;
switch (isdefault)
{
case :this.IsDefault = IsDefaultContact.默认;
break;
case :this.IsDefault = IsDefaultContact.非默认;
break;
}
return this; }
}

5.经销商聚合中经销商层次结构对象的领域逻辑实现:

 public partial class DealerTree
{
private readonly IDealerRepository idealerrepository;
public DealerTree(IDealerRepository idealerrepository)
{
this.idealerrepository = idealerrepository;
}
public DealerTree CreateDealerTree(Guid? parentdealerid,Guid dealerid)
{
this.Id = Guid.NewGuid();
this.DealerId = dealerid;
this.ParentDealerId = parentdealerid;
this.Layer = parentdealerid == null ? : idealerrepository.GetParentDealerLayer(Guid.Parse(parentdealerid.ToString())) + ;
return this;
}
}

6.经销商聚合中经销商对象的领域逻辑实现:

 public partial class Dealers
{
private readonly IDealerRepository idealerrepository;
public Dealers(IDealerRepository idealerrepository)
{
this.idealerrepository = idealerrepository;
}
public Dealers RegisterDealer(Guid id,string name,string tel,decimal telmoney,List<Contact>
contacts,Guid? parentid)
{
this.Id = id;
this.Code = "Code " + name;
this.Name = name;
this.Tel = tel;
this.TotalEleMoney = telmoney;
if (telmoney < )
{
this.CardType = CardType.普通会员;
}
else if (telmoney >= && telmoney < )
{
this.CardType = CardType.银卡会员;
}
else
{
this.CardType = CardType.金卡会员;
}
this.SubCount = ;
this.TotalPV = ;
this.JiangJInMoney = ;
this.Contacts = contacts;
this.DealerTree = new DealerTree(idealerrepository).CreateDealerTree(parentid, id);
return this;
}
}

7.登录聚合中登录对象的领域逻辑实现:

 public partial class Login
{
public Login CreateLogin(string code,Guid dealerid)
{
this.Id = Guid.NewGuid();
//手机号
this.Code = code;
//默认初始密码
this.Password=MD5Encrption.GetMd5Str("");
this.DealerId = dealerid;
return this;
}
}

这样,我们就完成了基本数据库的访问、操作和相关领域逻辑的实现。

QQ讨论群:309287205

DDD实战进阶视频请关注微信公众号:

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

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

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

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

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

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

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

  4. DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)

    本系列文章 DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述) DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一) 近年来,关于如何开发基于 ...

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

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

  6. DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)

    这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...

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

    了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的架构,只有了解了经典DDD的架构,你才能 ...

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

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

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

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

随机推荐

  1. 利用并查集+贪心解决 Hdu1232

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. 【图的DFS】图的DFS非递归算法

    在DFS的递归算法中,DFS框架如下: 1访问起点v0 2依次以v0的未访问的连接点为起点,DFS搜索图,直至图中所有与v0路径相通的顶点都被访问. 3若该图为非连通图,则图中一定还存在未被访问的顶点 ...

  3. Beanstalkd 一个高性能分布式内存队列系统

    需要一个分布式内存队列,能支持这些特性:任务不重不漏的分发给消费者(最基础的).分布式多点部署.任务持久化.批量处理.错误重试..... 转载:http://rdc.taobao.com/blog/c ...

  4. printf函数压栈解惑

    最近看到一些程序员的笔试题目,经常会考到printf函数的参数压栈问题,总体来讲就是参数从右向左依次压栈,再出栈,但是今天看到一个看似很简单的题目,却一直找不到头绪.题目如下: #include &l ...

  5. UML 类图. 对象图. 接口图. 用例图 .包,参与者. 依赖关系. 泛化/继承关系. 关联关系 .聚合/聚集关系. 实现关系 组合关系。

    结构元素 结构元素包括,类,对象,接口,用例,参与者. 类图 类图图示      类图是UML中最基本的元素了吧?根据OO的思想"天下一切皆对象",而类是对象的抽象.      左 ...

  6. “XcodeGhost”病毒之后,苹果更应注…

    虽然大家都在期待中秋假期的到来,不过让开发者挺闹心的一件事就是这几天网上.朋友圈以及各种群中炒得沸沸扬扬的"XcodeGhost"病毒事件,就连央视也惊动了!! 事件起源 事件起源 ...

  7. mysql进阶(十八)完全卸载mysql数据库图文教程

    完全卸载mysql数据库图文教程 有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功! 方法/步骤 1.控制面板-->所有控制面板项-- ...

  8. mysql进阶(十一)外键在数据库中的作用

    MySQL外键在数据库中的作用 MySQL外键的目的是控制存储在外键表中的数据,使两张表形成关联,是MySQL数据库中非常重要的组成部分,值得我们去深入了解.那么,MySQL外键究竟起到哪些作用呢?下 ...

  9. Java-ServletRequestWrapper

    /** * * Provides a convenient implementation of the ServletRequest interface that * can be subclasse ...

  10. Linux:进程通信之消息队列Message实例

    /*send.c*/ /*send.c*/ #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h&g ...