创建领域层
系列文章总目录
创建项目
创建解决方案管理器
打开vs>创建新项目>选择ASP.NET Core Web 应用程序>选择Web Api。
项目名称依据个人习惯,命名为Nm.Reservation.Api。
创建Domain项目
在创建好的解决方案管理其中选择添加,类库.NET Core。
命名为Nm.Reservation.Domain
添加依赖项
选择管理NuGet程序包,添加Volo.Abp.Ddd.Domain。
创建Module
创建类文件,类文件名称根据Abp vnext框架的默认约定可以命名为ReservationDomainModule。集成Abp vnext基类AbpModule,并在类上添加特性AbpDddDomainModule。
using Volo.Abp.Domain; using Volo.Abp.Modularity; namespace Nm.Reservation.Domain { [DependsOn(typeof(AbpDddDomainModule))] public class ReservationDomainModule : AbpModule { } }
创建实体
更具项目介绍中的业务需求,我们首先创建预约信息管理类:
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; using System.Linq; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; namespace Nm.Reservation.Domain { /// <summary> /// 预约管理信息 /// </summary> public class ReservationManagerInfo : FullAuditedAggregateRoot<Guid> { /// <summary> /// 名称 /// </summary> public string Name { get; protected set; } /// <summary> /// 开放天数 /// </summary> public int OpenDays { get; protected internal set; } /// <summary> /// 是否包含当天 /// </summary> public bool IncludeDay { get; protected internal set; } /// <summary> /// 附记 /// </summary> public string ScriptPost { get; set; } /// <summary> /// 预约条件集合 /// </summary> public ICollection<ReservationCondition> ReservationConditions { get; protected internal set; } public ReservationManagerInfo( Guid id, [NotNull]string name, [NotNull]int openDays, string scriptPost = null) { Id = id; Name = name; OpenDays = openDays; ScriptPost = scriptPost; ReservationConditions = new Collection<ReservationCondition>(); } public virtual void SetOpenDays(int days) { OpenDays = days; } public void SetIncludeDay(bool include) { IncludeDay = include; } public virtual void AddReservationCondition(ReservationCondition reservation) { Check.NotNull(reservation, nameof(reservation)); ReservationConditions.Add(reservation); } public virtual void RemoveReservationCondition(ReservationCondition reservation) { Check.NotNull(reservation, nameof(reservation)); ReservationConditions.RemoveAll( d => d.ItemName == reservation.ItemName && d.ItemValue == reservation.ItemValue); } public virtual ReservationCondition FindReservationCondition(string itemName) { return ReservationConditions.FirstOrDefault(d => d.ItemName == itemName); } } }
预约信息管理类集成了Abp聚合跟基类,从我们的业务上可以看到,预约管理信息与预约条件形成了聚合的业务逻辑,预约条件信息依赖于预约管理信息,与预约管理信息同生共死。
属性的访问修饰符设置为私有与internal,这样可以更好的管理预约信息并且保证数据的安全性。为预约条件信息设置三个方法,分别实现添加、删除、查询。为开放天数、是否包含当天设置方法,可以在后续的应用中修改这两个信息。