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


    上篇文章主要讲述了经销商上下文的需求与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 1:this.IsDefault = IsDefaultContact.默认;
                        break;
                    case 2: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 ? 1 : idealerrepository.GetParentDealerLayer(Guid.Parse(parentdealerid.ToString())) + 1;
                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 < 2000)
                {
                    this.CardType = CardType.普通会员;
                }
                else if (telmoney >= 2000 && telmoney < 4000)
                {
                    this.CardType = CardType.银卡会员;
                }
                else
                {
                    this.CardType = CardType.金卡会员;
                }
                this.SubCount = 0;
                this.TotalPV = 0;
                this.JiangJInMoney = 0;
                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("111111");
                this.DealerId = dealerid;
                return this;
            }
        }

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

    QQ讨论群:309287205

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

  • 相关阅读:
    bzoj1257
    bzoj1833
    bzoj3505
    bzoj2226
    bzoj1263
    bzoj2429
    bzoj1854
    bzoj3555
    bzoj1877
    放两个模版
  • 原文地址:https://www.cnblogs.com/malaoko/p/9002653.html
Copyright © 2020-2023  润新知