なぜ削除フラグを使ってはいけないのか難しいのか

はじめに

この記事は私の考えを箇条書きにしたものを元にClaude 3 Sonnetによって自動生成した記事です。
あえて本文は一切修正を加えていません。

世の中には「削除フラグを使ってはいけない」という言葉が広く知れ渡っています。しかし、その根本的な理由については伝わっていないことが多いようです。情報が抽象化されて伝わり、本来の意味が失われてしまうことは珍しくありません。

削除フラグを使ってはいけない理由は、ドメイン層における「削除」の概念と、永続化層における「削除」の概念のズレが原因だと考えられます。

ドメイン層と永続化層のズレ

ドメイン層では、ユーザーが保持するリソースを「削除」するということは、そのリソースが他のユーザーから見えなくなることを意味します。しかし、リソースを保持するユーザーから見れば、それは削除ではなく、単に状態が変更されただけです。

一方、永続化層では、削除とは物理的にデータを消去することを意味します。ドメイン層の「削除」の概念と永続化層の「削除」の概念は異なるのです。

削除フラグの誕生

このドメイン層と永続化層の概念のズレを無理やり対応させようとして、削除フラグが生まれました。つまり、ドメイン層では「削除」したリソースを、永続化層では物理的に消去せずに、削除フラグを立てることで両者を無理やり対応させようとしたのです。

しかし、この対応は本質的な解決にはなっていません。削除フラグは、ドメイン層と永続化層の概念のズレを隠蔽しているに過ぎません。

適切な対応

適切な対応としては、永続化層においてリソースを別のテーブルに移動するか、レコードに状態を表すカラムを持たせ、その値を変更することです。つまり、ドメイン層の概念に合わせて永続化層の構造を変更する必要があります。

まとめ

「削除フラグを使ってはいけない」という言葉は広く知れ渡っていますが、その根本的な理由は伝わっていないことが多いようです。その理由は、ドメイン層と永続化層における「削除」の概念のズレにあります。削除フラグはこのズレを隠蔽しているに過ぎず、適切な対応としてはドメイン層の概念に合わせて永続化層の構造を変更することが求められます。

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