201 Views
June 04, 26
スライド概要
Professional Ruby and Rails programmer in Tokyo.
変わるもの 変わらないもの @Omotesando.rb #122
もとつねの日常 @daily_mototsune Ruby on Railsを中心に扱っているフリーランスエンジニア ドメインモデリングからAWSでの運用、スクラム運営やチームビルディ ングなどなど楽しくやらせてもらってます 普段はOmotesando.rbやGinza.rbによくいます 🍷♨✈🏎
今日はモデル設計とか そんな感じの話です
変わるもの 変わらないもの
変わるもの - 今日の気分 口座の残高 メールアドレス 注文ステータス 自分の名前
変わらないもの - 利用規約に同意した事実 メールを送信した事実 @Omotesando.rb #122にきた事実 私が結婚した事実
ここが今日の話の中心です。 (結婚の話じゃないよ)
StateとEvent 状態と出来事
状態
変わるメールアドレス
注文のステータス
出来事
決済が完了した事実
状態と出来事の整理
さて 我々はRails(ActiveRecord) を使うわけだけど
ActiveRecordは createもupdateもできる
どれが状態でどれが出来事? - User Order Payment LoginLog Agreement NotificationDelivery
全員が理解していないと 「ログだけど typo 直したいから update しようね」 「決済履歴だけど status 変えれば辻褄合うよね」 「同意履歴だけど最新の規約IDに直しておこうね」
自由の代償
出来事モデルには制約をかけた方がいい - 「これは変わるデータです」 - 「これは変わらない記録です」 という意図を、モデルの名前やコメントだけではなく、コードの振る舞いと して表現したい。
fuhen_record gem
https://rubygems.org/gems/fuhen_record
https://github.com/saeki-mototsune/fuhen_record/
宣言で設計意図の伝承 「このテーブルはCRUDのUとDを前提にしていません」 「このレコードは、あとから都合よく直すものではありません」 「過去の事実は、追記によって扱います」
変えれないことを価値に
Takeaway データには、変わるものと変わらないものがあります。 変わるものは State として扱う。 変わらないものは Event、または Record として扱う。 そして、変わらないことが大切な ActiveRecord モデルには、fuhen_record を使う。