blog.bouzuya.net

2022-10-01 ABC271 に参加して水色に復帰した

ABC271 に参加した。 1181 → 1229 (+48) で水色に復帰した https://atcoder.jp/users/bouzuya/history/share/abc271


『アウトポスト』を観た。


twiq 実装メモ (11)

  • 2022-09-30 の続き
  • 明日は EventStreamUser に適用する
  • EventStream::generate の引数が RawEventType::from(EventType)EventData::from_structured(Payload {...}) となっていて冗長だ
  • EventStream::generate<T: Into<EventType>, U: serde::Serialize> にしよう
  • Payloaddomain::aggregate::event::x の外側に出ている
  • もう Payload 側を event として扱えるようにしたほうが良さそうな気がする
  • 名前のブレがあるので EventDataEventPayload にする

個々のイベントと EventPayload の対応。

  • UserCreated などの個々のイベントが EventPayload と対応するように変えるとする
  • RawEvent を構築するには EventId EventStreamId EventStreamSeqUserCreated (EventPayload) を組み合わせる必要がある
  • 煩雑なのでこれらをまとめた EventMetadata を導入すると良さそう
  • Event(EventMetadata, EventPayload)
  • EventMetadata(EventId, EventType, EventStreamId, EventStreamSeq)
  • 大丈夫かな……怪しい
  • UserCreatedEventPayload のみで、ほかが必要なら RawEvent で持つ……?
  • RawEvent で取り回して EventPayload から適宜 UserCreated を取り出す……?
  • UserCreatedEventPayload になると domain::EventEventPayload のみになる
  • EventPayload だけだと EventType を含んでいないので Event に振り分けられない……?
  • impl TryFrom<RawEvent> for Eventimpl From<Event> for EventPayloadimpl From<Event> for EventType になる
  • UserId のように EventStreamId と兼ねている箇所をどうするか
  • 諦めてバラすして対応関係を別で持つのが良さそう UserId -> EventStreamId を別で用意する

aggregate id と EventStreamId を分離する。

  • 明日はここから

今日のコミット。