10.ABP中的DDD

一、概述

二、使用

2.1 值对象

1.没有标识符,只有属性,且属性不可变
3.不会单独持久化(比如Address值对象不会创建一个Address表来存储的)
4.值对象是否一样时,不管是否同一对象,所有属性相等即相等

2.1.1 值对象事例

ABP提供ValueObject类来创建值对象,同时重写equality (==)成属性相等即相等 代码如下:

public class Address : ValueObject
{ //值对象属性不可修改 public Guid CityId { get; private set; } public string Street { get; private set; } public int Number { get; private set; } public Address(Guid cityId, string street, int number) { CityId = cityId; Street = street; Number = number; } }

2.2 聚合根AggregateRoot

  • AggregateRoot 扩展自 Entity 类,用来创建聚合根实体。
  • 聚合根定义了 DomainEvents 的集合用来产生领域事件。在当前的工作单元完成之前,这些事件被自动的触发。

2.3 领域事件

2.3.1 定义事件源

    public class TaskEventData:EventData
    {
        public string Name { get; set; }
        public TaskEventData(string name)
        {
            this.Name = name;
        }
    }

2.3.2 定义事件

    public class TaskEventHandler : IEventHandler, ITransientDependency
    {

        public void HandleEvent(TaskEventData eventData)
        {
            Debug.Write(eventData.Name);
        }
      
    }

2.3.3 调用事件

EventBus.Trigger(new Tasks.TaskEventData("1"));

2.4 实体领域事件

ABP提供了默认的事件源且实体改变时会自动调用相应的事件

  • EntityCreatingEventData
  • EntityCreatedEventData
  • EntityUpdatingEventData
  • EntityUpdatedEventData
  • EntityDeletingEventData
  • EntityDeletedEventData
  //Task实体新增时会自动触发该事件
    public class TaskEventHandler1 : IEventHandler>
                                    , ITransientDependency
    {
        public void HandleEvent(EntityCreatedEventData eventData)
        {
            Debug.Write(eventData.Entity.Title);
        }
    }

你可能感兴趣的:(10.ABP中的DDD)