JJUG CCC 2017 Springで論理削除フラグをどうにかするための話をしてきました 【FOLIOスポンサー】
JJUG CCC 2017 Springで、「データ履歴管理のためのテンポラルデータモデルとReladomoの紹介」という話をしてきました。
今回の登壇は、株式会社FOLIOのスポンサーセッションです!FOLIOについてはこちらの入社エントリー記事もご参考ください。Toggetterは下のリンクから。
世の中のみなさんが「論理削除フラグ」を使いたくなるモチベーションとしては、実は「削除」ではなく別のビジネスロジックを実装したいだけであることがほとんどだと思います。
たとえば論理削除フラグという名の死亡フラグ - @ledsun blogというエントリを参考にさせていただくと、下記のような要件の例があります。
・社員が退職(・転属)する
・(売掛金の回収を諦めて)売上を打ち消す
・「お知らせメッセージ」を公開日がくるまで非表示にする
・既読メッセージを表示しない
・保存期間が過ぎたアンケート結果をオペレーターが見れなくする
これらの要件は、ほとんどがある状態の「有効時間」を適切に扱いたいだけであって、「削除」をしたいわけではないでしょう。スライドでは「履歴」という観点で例を説明していますが、「有効時間データモデル」は時間の経過とともに変化する状態の概念を適切に扱えるデータモデルなので、上記のような要件をフラグに頼らず扱うことができます。
今回のセッションでは「スナップショットデータモデル」、「トランザクション時間データモデル」、「有効時間データモデル」、「バイテンポラルデータモデル」という4種類のモデルを紹介しました。下記の方がおっしゃるように、これらの名前と概念を広めるだけでも世の中が少し幸せになるのではないかと考えています。ぜひスライドをご覧になってみてください。
このデータモデルの名前だけでももっと有名になるべきやね。名前がないとそれぞれのデータモデルを区別できないし。 #ccc_g3
— て@JJUG CCCいいね! (@tethon) 2017年5月20日
テンポラルデータモデルの実際の実装としてはJavaを使う方はぜひともReladomoを検討してみてほしいですね。とても良いフレームワークです。
JUnitでテストをパスしていきながら使用法を学ぶKataも提供されています。
現存するドキュメントではGuided Tour Of Reladomoが一番わかりやすいですが、英語です。今回、Java技術メモ三銃士のうちお二方が聴講しておられるのを把握したので、きっとそのうち素敵な日本語のメモが出てくるに違いないと信じております。
皆さんぜひ活用して周りに広めてみてください!
合わせて読みたい
かわしまさんが下記のスライドで紹介しているイミュータブルデータモデルの設計法と上記テンポラルデータモデルの設計法を合わせて適用すると、非常に堅牢かつ柔軟な設計ができると思います。ぜひご参照ください!!