Read, Write モード. クラスにモードを取り入れ、利用できるメソッドを制限する 〜クラス設計メモ
概略
- 集約やEntityのような、状態変更のあるモデルを参照系で利用する際に、状態変更を起こすメソッドを呼び出せてしまうのが気になる
- 参照系のユースケースの際や、計算用のモデルに集約を渡す際には同じモデルを参照用途のみで利用できるようにしたい
- generalized typed constraint を利用して、状態変更のあるモデルに
Read
モード,Write
モードを導入する
本文
実務では使ったことはないのですが、ちょっとしたアイデアとして考えてみようと思います。 やりたいイメージとしては、更新可能なモデルに対して、ReadモードとWriteモードを定義し、Writeモードの時だけ更新メソッドを呼べるようにしたいといった感じです。
まずは Mode
を定義します。
これと generalized typed constraints を利用して実現します。 ものすごくシンプルに作るとこんな感じですね。
型パラメータに Mode
を受け取っています。M
が Write
の時のみ、setValue
メソッドは呼び出せます。
Read
モードの時に setValue
メソッドを呼ぼうとすると、コンパイルエラーになります。
今回の例はシンプルなものでしたが、モードを使うことで不用意に呼び出せなくする方法を考えてみました。 個人的には結構面白いなと思いつつ、そんな不用意に更新しちゃう人いないよなという気もしてるので冗長な気もしてます。