一、ABP知识点篇

10.ABP中的DDD

2017-08-29  本文已影响77人  落地成佛

一、概述

二、使用

2.1 值对象

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

2.1.1 值对象事例

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

public class Address : ValueObject<Address>
{
    //值对象属性不可修改
    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

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<TaskEventData>, ITransientDependency
    {

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

2.3.3 调用事件

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

2.4 实体领域事件

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

  //Task实体新增时会自动触发该事件
    public class TaskEventHandler1 : IEventHandler<EntityCreatedEventData<Task>>
                                    , ITransientDependency
    {
        public void HandleEvent(EntityCreatedEventData<Task> eventData)
        {
            Debug.Write(eventData.Entity.Title);
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读