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を構築するにはEventIdEventStreamIdEventStreamSeqと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 を分離する。
- 明日はここから
今日のコミット。