创建领域层

系列文章总目录

创建项目

创建解决方案管理器

打开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,这样可以更好的管理预约信息并且保证数据的安全性。为预约条件信息设置三个方法,分别实现添加、删除、查询。为开放天数、是否包含当天设置方法,可以在后续的应用中修改这两个信息。

posted @ 2020-07-15 17:24  佩奇giser  阅读(333)  评论(0编辑  收藏  举报