[戻る]

Java読書会BOF「セキュア・バイ・デザイン」を読む会 第5回

開催概要

日時

2022年11月26日 10:00 - 17:00

場所

てくのかわさき 第3会議室

出席者(敬称略)

遠藤、平山、岩室、高橋(徹)

  • 本日は、「セキュア・バイ・デザイン 安全なソフトウェア設計」のp.230、 6.2.7 O/R(Object-Relational)マッパーのフレームワークと複雑な制約から読み始めます。

第2部 基礎編

第6章 状態の完全性(integrity)の保証

6.2 正しい状態で生成されるエンティティ

6.2.7 O/R(Object-Relational)マッパーのフレームワークと複雑な制約
  • O/Rマッパーに @PostLoad があるのを始めて知った

  • RDBMSのテーブルにカラムを追加したときに、追加前のレコードが不変条件違反になってしまう場合がある

  • O/Rマッパー使うのはライフサイクル管理が面倒

    • RecordSet使ってゴリゴリ書くのは大変

    • SpringJDBCは楽だよ

6.3 エンティティの完全性(integrity)

6.3.2 可変(mutable)オブジェクトが共有されることへの対策
  • 例題の日付(Date)クラスについて、少し脱線し、java date & time APIの使いにくさ(複雑性)、いやいや期間の計算ができる、難しいのはAPIではなく現実世界の日付の概念だ、などの議論。

6.3.3 コレクションに対する完全性(integrity)の保護
  • p.240 下5行目のサンプルコード のジェネリック表現( <? extends T> )で?について少し議論。

  • p.241 リスト6.14【誤植】:

    ) return new Collections.unmodifiableList(orderitems);
    ) return Collections.unmodifiableList(orderitems);
    

第7章 状態の複雑さの軽減

7.1 部分的不変エンティティ(partially immutable entity)

  • p.249 リスト7.2 【誤植】:

    ) 常に同じ顧客IDを返る
    ) 常に同じ顧客IDを返す
    

7.2 状態オブジェクト(state object)

7.2.2 エンティティの状態を個別のオブジェクトとして実装すること
  • p.258 リスト7.7 は、状態と状態遷移を状態オブジェクト MaritalStatus にカプセル化しているが、 イベントの処理はカプセル化していない。 この例題では、1つの状態でだけイベントが有効なのでこの実装で十分だが、複数の状態で同じイベントが有効である時、 イベントの処理内容が状態により異なるだろうから、ステートパターンのような実装が必要になるのでは?

    • ステートパターンは、似て非なるクラスが増殖しイマイチ

    • やはりswitch文がわかりやすいのでは

    • ステート遷移マシン(エンジン)を作るのが良いのでは。DSLで書きたい。

7.3 エンティティ・スナップショット(entity snapshot)

7.4 エンティティ・リレー(entity relay)

本日は、p.274 7.4.1 フェーズへの分割 の前まで読みました。 次回は、p.274 7.4.1項からです。

[戻る]