上篇文章主要讲述了经销商上下文的需求与 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;
- }
- }
这样, 我们就完成了基本数据库的访问, 操作和相关领域逻辑的实现.
来源: https://www.cnblogs.com/malaoko/p/9002653.html