美文网首页领域驱动设计DDD与微服务实战案例进阶
领域驱动设计实战进阶第一波(八):实现经销商上下文领域层之POC

领域驱动设计实战进阶第一波(八):实现经销商上下文领域层之POC

作者: malaoko | 来源:发表于2018-05-08 15:22 被阅读33次

    DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(实现经销商上下文领域层之POCO模型)

    从这篇文章开始,我们开始介绍大健康行业直销系统领域层的实现。

    先简单讲下业务方面的需求:直销系统会有一个顶级的经销商,经销商的基本信息中包括经销商的名字、联系人(因为在平台购买产品后,会寄送给联系人)、总的电子币(电子币是由经销商支付产生,

    购买产品后会扣减电子币)、总的奖金币(系统周期性根据经销商购买的东西来确定奖金币,奖金币可以购买东西,也可以提现)、总PV(经销商购买时,会根据购买产品的PV进行累加)、卡的类型(根据经销商初次的电子币确定卡的类型)、子经销商个数(子经销商的注册由父经销商进行,父经销商的直接子经销商不超过2个)、级别(根据周期消费总额确定经销商级别);另外经销商有个层级结构,

    最后系统当然还要对应经销商的登录信息,默认系统会有个登陆密码;经销商在注册子经销商时,会从自己扣除一部分电子币附加到子经销商上。

    从整个需求的理解并通过对DDD理解来看,我们会有两个聚合,分别是经销商聚合(包括经销商、联系人、层级)和登陆聚合。

    1.经销商聚合根:

    publicpartialclass Dealers:IAggregationRoot

        {

            public Dealers() { }

            publicstringCode {get;set; }

            [Key]

            publicGuid Id {get;set; }

            publicstringName {get;set; }

            publicstringTel {get;set; }

            publicdecimalTotalEleMoney {get;set; }

            publicdecimalJiangJInMoney {get;set; }

            publicdecimalTotalPV {get;set; }

            publicCardType CardType {get;set; }

            publicLevel Level {get;set; }

            publicintSubCount {get;set; }

            publicList Contacts {get;set; }

            publicDealerTree DealerTree {get;set; }

        }

        publicenumCardType :int    {

            普通会员=1,

            银卡会员=2,

            金卡会员=3    }

        publicenumLevel :int    {

            片区经理=1,

            省区经理=2,

            大区经理=3,

            董事=4    }

    2.联系人值对象:

    publicpartialclass Contact : IValueObject

        {

            public Contact() { }

            publicGuid Id {get;set; }

            publicstringContactName {get;set; }

            publicstringContactTel {get;set; }

            publicstringProvince {get;set; }

            publicstringCity {get;set; }

            publicstringZero {get;set; }

            publicstringStreet {get;set; }

            publicIsDefaultContact IsDefault {get;set; }    }

        publicenumIsDefaultContact :int    {

            默认=1,

            非默认=2    }

    3.层次结构值对象:

    publicpartialclass DealerTree : IValueObject

        {

            public DealerTree() { }

            publicGuid Id {get;set; }

            publicGuid DealerId {get;set; }

            publicGuid? ParentDealerId {get;set; }

            publicintLayer {get;set; }

        }

    从经销商聚合大家可以看到,在创建一个经销商时,除了有经销商的基本信息外,还必须同时创建联系人与层次结构,这样一个经销商才是完整的,而且经销商也引用到了联系人与层次结构。

    4.登录聚合根:

    publicpartialclass Login : IAggregationRoot

        {

            public Login() { }

            //代表登录的电话号码publicstringCode {get;set; }

            publicstringPassword {get;set; }

            publicGuid DealerId {get;set; }

            [Key]

            publicGuid Id {get;set ; }

        }

    4.处理经销商界限上下文与数据访问上下文的映射

    关于如何讲经销商界限上下文映射到数据访问上下文,请参考产品上下文的相关实现,这里就不再累述了。

    下一篇文章开始讲经销商上下文仓储的实现,因为在注册子经销商的领域逻辑中,会通过仓储去判断当前经销商是否子经销商个数超过2个。

    QQ讨论群:309287205

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

    相关文章

      网友评论

        本文标题:领域驱动设计实战进阶第一波(八):实现经销商上下文领域层之POC

        本文链接:https://www.haomeiwen.com/subject/uwqwrftx.html