Skip to content
This repository has been archived by the owner on Mar 6, 2024. It is now read-only.

事件的关系? #3

Open
ForteScarlet opened this issue Nov 30, 2023 · 0 comments
Open

事件的关系? #3

ForteScarlet opened this issue Nov 30, 2023 · 0 comments

Comments

@ForteScarlet
Copy link
Member

ForteScarlet commented Nov 30, 2023

Warning

尚未完成的定义。

现在事件类型 Event 更加简化了。不再有 Event.Key,也不再在顶层类型 Event 中就约束大量的属性(比如要求 Bot 的存在),而是仅要求一个 id

但是事件一层层的类型定义依旧是个头大的事情。想要让它们尽可能简单且全面,同时避免产生大量地同义属性。
比如:

interface ActorEvent : Event {
    suspend fun actor(): Actor
}

interface GroupEvent : ActorEvent {
    suspend fun group(): ChatGroup    

    override suspend fun actor(): ChatGroup = group()
}

上述示例中,GroupEvent 中的 groupactor 就是所说的“同义属性”。

但是想要让事件类型的继承关系层层递进,想要避免这种“同义属性”就会比较困难:
例如,如果想要避免,那么 GroupEvent 中可以直接沿用 actor 而不再新增 group 属性,
但是这样就会略反直觉,因为在 GroupEvent 中的 group 竟然不叫 group

或者对于这类属性,约束它们只有一个,并定义为一个比较通用的名字,比如 sourcecontent
但是这样就需要尽量避免出现两个此类事件类型被同时实现的情况。比如:

interface ActorEvent : Event {
    suspend fun content(): Actor
}

interface GroupEvent : ActorEvent {
    override suspend fun content(): ChatGroup
}
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant