我正在尝试在我的项目中实现领域驱动设计。这是我的基Aggregate类:
public abstract class UUIDAggregate {
private final DomainEventPublisher domainEventPublisher;
protected void publish(DomainEvent domainEvent) {
domainEventPublisher.publish(domainEvent);
}
}
假设我们有UserAccount聚合:
public class UserAccount extends UUIDAggregate {
private String email;
private String username;
private String password;
private String firstName;
private String lastName;
public void update() {
publish(new DomainEventImpl());
}
}
这是我的DomainEventPublisher:
public interface DomainEventPublisher {
void publish(DomainEvent event);
}
这是DomainEventPublisherImpl:
@Component
public class DomainEventPublisherImpl implements DomainEventPublisher{
@Autowired
private ApplicationEventPublisher publisher;
public void publish(DomainEvent event){
publisher.publishEvent(event);
}
}
现在,这似乎是一个好主意,域与实现分离,但这不起作用。DomainEventPublisher不能是,Autowired因为UUIDAggregate不是@Component或@Bean。一种解决方案是DomainService在那里创建和发布事件,但这似乎会将域泄漏到域服务,如果我这样做,我将陷入贫血模型。另外,我能做的就是DomainEventPublisher作为参数传递给每个聚合,但这似乎也不是一个好主意。
Smart猫小萌
三国纷争
相关分类