领域驱动设计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;
    }
}
复制代码

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

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

转载于:https://juejin.im/post/5b7539e96fb9a009cb694834

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值