10.ABP中的DDD

作者: 落地成佛 | 来源:发表于2017-08-29 23:24 被阅读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

  • 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);
        }
    }

相关文章

  • 10.ABP中的DDD

    一、概述 无 二、使用 2.1 值对象 1.没有标识符,只有属性,且属性不可变3.不会单独持久化(比如Addres...

  • DDD

    零、为什么DDD? 一、DDD与微服务 DDD和微服务有着天生的默契。比如一个微服务应该对应DDD中的一个限界上下...

  • DDD诊所——异步事件综合征

    【按】“DDD诊所”是Thoughtworks DDD社区的一项活动,通过对同事们在实施DDD过程中遇到的问题进行...

  • MarkDown

    ###fff ..aa..... ddd ddd ddd ddd ddddddasdf

  • test1

    *title* dddd ddd ddd ddd

  • DDD中的模型

    “模型”这个词语在DDD中反复出现,是DDD的核心概念。可是我们从Eric在他的著作(Domain-driven ...

  • 第一节 DDD相关概念

    什么是DDD DDD相关概念 1.1什么是DDD 领域驱动设计,即Domain Driven Design(DDD...

  • 2018-02-09

    # aaa ## aaa ### ddd ddd

  • XML之XPath

    /AAA/AAA/CCC/AAA/DDD/BBB //BBB//DDD/BBB /AAA/CCC/DDD/*/*/...

  • DDD领域驱动设计浅见

    目录 DDD简介DDD是啥DDD能给微服务带来什么不用DDD的常见设计方式DDD整洁架构常见三层架构设计整洁架构D...

网友评论

    本文标题:10.ABP中的DDD

    本文链接:https://www.haomeiwen.com/subject/lhrodxtx.html