編集:これは複数のインターフェイスを使用して強制されるため、間違った順序で呼び出されることを心配していません.ターミナルメソッドがまったく呼び出されることを心配しています.
ビルダー パターンを使用して、システムでアクセス許可を作成しています。ビルダー パターンを選択したのは、私たちの製品ではセキュリティが非常に重要であるため (これには未成年者が関与するため、COPPAなど)、パーミッションが読みやすいことが不可欠であると感じ、読みやすさが最も重要であると感じた (つまり、流暢なスタイルを使用する) 6 つの値を持つ単一の関数ではなくビルダー パターン)。
コードは次のようになります。
permissionManager.grantUser( userId ).permissionTo( Right.READ ).item( docId ).asOf( new Date() );
これらのメソッドは、ターミナル メソッド (つまり asOf ) がデータベースへのアクセス許可をコミットする際に、プライベート バッキング Bean を設定します。そのメソッドが呼び出されない場合、何も起こりません。時折、開発者は端末メソッドを呼び出すのを忘れることがありますが、これはコンパイラ エラーの原因にはならず、コードのすばやい読み取り/スキミングで見落としがちです。
この問題を防ぐにはどうすればよいですか? 保存する必要がある Permission オブジェクトを返したくありません。これは、ノイズが増え、パーミッション コードの読み取り、追跡、追跡、理解が難しくなるためです。
端末コマンドによってマークされるバッキングにフラグを置くことを考えました。次に、finalize
メソッドのフラグを確認し、オブジェクトが永続化せずに作成された場合はログに書き込みます。(finalize
実行が保証されていないことはわかっていますが、私が考えることができる最高のものです。)