2022-10-01 ABC271 に参加して水色に復帰した
ABC271 に参加した。 1181 → 1229 (+48) で水色に復帰した https://atcoder.jp/users/bouzuya/history/share/abc271 。
『アウトポスト』を観た。
twiq 実装メモ (11)
- 2022-09-30 の続き
- 明日は
EventStream
をUser
に適用する EventStream::generate
の引数がRawEventType::from(EventType)
とEventData::from_structured(Payload {...})
となっていて冗長だEventStream::generate<T: Into<EventType>, U: serde::Serialize>
にしようPayload
がdomain::aggregate::event::x
の外側に出ている- もう
Payload
側を event として扱えるようにしたほうが良さそうな気がする - 名前のブレがあるので
EventData
をEventPayload
にする
個々のイベントと EventPayload
の対応。
UserCreated
などの個々のイベントがEventPayload
と対応するように変えるとするRawEvent
を構築するにはEventId
EventStreamId
EventStreamSeq
とUserCreated
(EventPayload
) を組み合わせる必要がある- 煩雑なのでこれらをまとめた
EventMetadata
を導入すると良さそう Event(EventMetadata, EventPayload)
EventMetadata(EventId, EventType, EventStreamId, EventStreamSeq)
- 大丈夫かな……怪しい
UserCreated
はEventPayload
のみで、ほかが必要ならRawEvent
で持つ……?RawEvent
で取り回してEventPayload
から適宜UserCreated
を取り出す……?UserCreated
がEventPayload
になるとdomain::Event
もEventPayload
のみになるEventPayload
だけだとEventType
を含んでいないのでEvent
に振り分けられない……?impl TryFrom<RawEvent> for Event
とimpl From<Event> for EventPayload
とimpl From<Event> for EventType
になるUserId
のようにEventStreamId
と兼ねている箇所をどうするか- 諦めてバラすして対応関係を別で持つのが良さそう
UserId -> EventStreamId
を別で用意する
aggregate id と EventStreamId
を分離する。
- 明日はここから
今日のコミット。