[戻る]
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項からです。
[戻る]