VaughnVernon/IDDD案例

13-04-09 banq

VaughnVernon/IDDD_Samples · GitHub

这是一个基于Vaughn Vernon的"Implementing Domain-Driven Design"简称(IDDD) 特定场景的开源案例。

模型和围绕其的架构技术随着时间迁移表现为各种不断变化的状态。

有四个子项目组成:

iddd_agilepm 项目是一个以LevelDB这样key-value存储作为持久层的案例,LevelDB 是一个纯Java实现: https://github.com/dain/leveldb

iddd_agilepm并没有使用任何容器(such as Spring).

iddd_collaboration项目是一个使用 Event Sourcing 和

CQRS的案例.它避免使用了ORM之类框架,展示基于JDBC的查询引擎. 这样技术虽然有其局限性,但是意味着小而快,无需任何元注解之类配置,虽然不完美。

iddd_collaboration项目展示它持久Event Sourced写模型和在另外一个线程实现CQRS的读模型. 使用LevelDB进行事件存储播放而 MySQL用于读模型的存储。也许两者之间有些数据不一致,可实现最终一致性。

The iddd_identityaccess 项目是使用ORM作为持久(Hibernate), 但是也没有被它干扰,提供一个RESTful客户端接口,通过REST (logs) 和 RabbitMQ.可发送Domain-Event提醒,

iddd_common 项目提供许多可重用组件,虽然并不试图成为一个框架,但是能提高代码重用。

我打开其中一个Person领域模型代码

 public void changeContactInformation(ContactInformation aContactInformation) {
        this.setContactInformation(aContactInformation);

        DomainEventPublisher
            .instance()
            .publish(new PersonContactInformationChanged(
                    this.tenantId(),
                    this.user().username(),
                    this.contactInformation()));
    }

<p>

它是通过 DomainEventPublisher.instance()静态变量直接发送事件,在Jdonframework中是通过注入的一个发送事件角色进行发送。

                   

1
lshoo
2013-04-13 21:00

看书的目录,感觉不错,期待国内引进。

tangxuehua
2013-04-13 21:24

他很早以前就写过一个Effective Aggregate Design的系列的,分三篇文章,在DDD的官网上。不过现在打不开了。

tangxuehua
2013-04-13 21:47

这个是书本作者接受采访的内容

njzhxf
2013-05-02 18:48

public class DomainEventPublisher {

    private static final ThreadLocal<DomainEventPublisher> instance = new ThreadLocal<DomainEventPublisher>() {
        protected DomainEventPublisher initialValue() {
            return new DomainEventPublisher();
        }
    };

    private boolean publishing;

    @SuppressWarnings("rawtypes")
    private List subscribers;

    public static DomainEventPublisher instance() {
        return instance.get();
    }

    ........
<p>

作者用了ThreadLocal的方式来获取DomainEventPublisher的实例,不知用意为何??哪位可以指点一下???

2Go 1 2 下一页