Closed5

2024-05-13 週の読んだ記事(Railsで集約/HanamiでDDD/Railsにおけるドメイン駆動設計の実践/概念の輪郭)

ブシトラブシトラ

5/16

https://techracho.bpsinc.jp/hachi8833/2024_02_05/138395

  • Repositoryパターンが推し進めるものは、いわゆるActive Recordパターンと真逆です
  • 20%の労力をかけてActive Recordを以下のような形に整えれば、Repositoryで80%のメリットを得られるという話も何となく思い出されます。
class Transaction
  def self.of_id(id)
    find(id)
  end

  def self.last_not_pending_of_user_id(user_id)
    where.not(status: "pending").where(user_id: user_id).order(:id).last
  end
end


class TransactionRepository
  class Record < ActiveRecord::Base
    self.table_name = "transactions"
  end
  private_constant :Record

  Transaction = Data.define(Record.attribute_names.map(&:to_sym))

  class << self
    def of_id(id)
      as_struct(Record.find(id))
    end

    def last_not_pending_of_user_id(user_id)
      as_struct(Record.where.not(status: "pending").where(user_id: user_id).order(:id).last)
    end

    private

    def as_struct(record)
      Transaction.new(**record.attributes.symbolize_keys)
    end
  end
end

既存のActiveRecord > 全モデル導入して浸透させる労力
だなぁ

このスクラップは2024/05/23にクローズされました