域事件-枚举的继承或使用



所以猜测我有这种域事件:

class BookChangedName...
class BookType1ChangedName extends BookChangedName...
class BookType2ChangedName extends BookChangedName...

这样更好还是:

class BookChangedName{
enum bookType = BOOK_TYPE_1;
}

由于他们说只有当类之间有不同的行为时才使用继承,所以我认为这里我会使用枚举示例(案例#2),因为域事件只是简单的DTO。

但是,在我的领域中,这种不同类型的事件有不同的含义(不同的处理路径)。所以,如果我使用示例#1,我会得到很多:

if(event instanceof BookType1ChangedName){
//do smth in domain
}
else if(event instanceof BookType2ChangedName){
//do smth in domain
}

而且我也不能像那样明确

when(BookType1ChangedName event){...

我必须做一些预处理,比如:

@EventHandler(matcher_pattern = event->event.bookType==BOOK_TYPE_1)
when(BookChangedNameevent){...

您的领域专家使用短语"BookType1"吗?你说每种类型的书都有不同的逻辑路径——我建议询问理性,也许每个事件都有一个更面向领域的名称?试着听领域专家描述这两种情况时使用的语言。

如果你能找到更多的描述性语言,我会选择基于继承性的单独事件。有了一些域事件机制,您可以订阅处理抽象超类或任何一种专业化,如果您想要这种灵活性,这可能会有所帮助。

另一方面,如果它真的只有booktype1和booktype2,将来可能只有booktype3和booktype4,我会考虑枚举,甚至只是整数,并考虑在不同的策略中实现不同的逻辑路径,并让您的域事件处理程序使用工厂为给定的书类型返回适当的策略,然后委托策略来执行逻辑。

事件名称是DDD中的重要组成部分(事实上,任何"名称"都很重要),因此我建议对不同的事件使用不同的事件名称,因为这些名称包含大量信息。此外,如果您使用类型代码(带有enum),则会由于额外的ifs而增加CRAP索引。

您应该只有一个BookChangedName事件,并具有该事件的BookType属性。事件的处理程序/订阅者应该负责逻辑。

相关内容

  • 没有找到相关文章

最新更新