一、概述
无
二、使用
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
- 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<TaskEventData>, ITransientDependency
{
public void HandleEvent(TaskEventData eventData)
{
Debug.Write(eventData.Name);
}
}
2.3.3 调用事件
EventBus.Trigger(new Tasks.TaskEventData("1"));
2.4 实体领域事件
ABP提供了默认的事件源且实体改变时会自动调用相应的事件
- EntityCreatingEventData<TEntity>
- EntityCreatedEventData<TEntity>
- EntityUpdatingEventData<TEntity>
- EntityUpdatedEventData<TEntity>
- EntityDeletingEventData<TEntity>
- EntityDeletedEventData<TEntity>
//Task实体新增时会自动触发该事件
public class TaskEventHandler1 : IEventHandler<EntityCreatedEventData<Task>>
, ITransientDependency
{
public void HandleEvent(EntityCreatedEventData<Task> eventData)
{
Debug.Write(eventData.Entity.Title);
}
}