見出し画像

【プログラミング】条件判定に直接カラムを指定するのはよくないと思った話

ご閲覧ありがとうございます。
今回は「条件判定に直接カラムを指定するのはよくないと思った」という話をしようと思います。

前提として以下のようなモデルがあるとします。
・Sku(ざっくり言うと販売商品)のモデルがある
・モデル(テーブル)には「is_saleable」というBooleanのカラムがある
・「is_saleable」がtrueだったら販売可能、falseだったら販売不可

Viewファイルで販売可能かに応じて以下のように実装ができます。

<span> <%= @sku.is_saleable ? '販売中' : '未販売' %> </span>
<p> <%= @sku.is_saleable ? '販売中の商品' : '未販売の商品' %> </p>

これが保守性の面でよくないと思いました。

例えばSkuに「is_open」という公開/非公開を管理するカラムが増えたとします。そうすると「 @sku.is_saleable」で判定している箇所を以下のように修正する必要があります。

<span> <%= @sku.is_saleable && @sku.is_open ? '販売中' : '未販売' %> </span>
<p> <%= @sku.is_saleable && @sku.is_open ? '販売中の商品' : '未販売の商品' %> </p>

これが数箇所だけだったら問題ないかもしれませんが、上記のような実装が何箇所もあったりすると修正範囲が拡大します(こういうのは最初は数箇所でも後々増えてくるんです🤮)。

直接カラムを使うのでなく、メソッドに包んであげていれば修正箇所は一箇所で済みました。

もし最初に以下の通り実装していれば

# Skuモデル
def saleable?
  is_saleable
end

# viewファイル
<span> <%= @sku.saleable? ? '販売中' : '未販売' %> </span>
<p> <%= @sku.saleable? ? '販売中の商品' : '未販売の商品' %> </p>

修正は1メソッドだけで済みます。

# Skuモデル
def saleable?
  is_saleable && is_open
end

# viewファイル
<span> <%= @sku.saleable? ? '販売中' : '未販売' %> </span>
<p> <%= @sku.saleable? ? '販売中の商品' : '未販売の商品' %> </p>

この記事が気に入ったらサポートをしてみませんか?