変更を楽に安全にするために 効果の大きかった関心の分離 ① ビジネスルール(計算判断ロジック)の記述を独立させる • 計算判断ロジックの複雑さ=アプリケーションの複雑さ • 計算判断ロジックを分離できれば他の部分は単純化・定型化できる ② ビジネスアクション(通知・記録・計算判断の実行)の関心事と ビジネスルール(計算判断ロジック)の記述を分離する ③ ビジネスの関心事の記述にデータベース操作を持ち込まない ④ 画面のごちゃごちゃ感(関心の混在)をクラス設計に持ち込まない
計算判断ロジック(ビジネスルール) を扱うクラスの設計 実践的で役に立つオブジェクト指向プログラミング ① 型(ビジネスで扱う値の種類)によるモジュール化 ② カプセル化(インスタンス変数とメソッドの強結合) ③ 宣言的に記述(イミュータブル) ④ 業務の関心事で抽象化(パッケージ名・クラス名・メソッド名・変数名)
テーブル設計のやり方 事実を記録するテーブル(主) ① 事実の発生のタイミングごとのテーブル ② NOT NULL 制約(NULLという事実はない) ③ 更新・削除不可 ④ 外部キー制約(事実と事実の関係の記録) 状態を参照するためのテーブル(補助:インデックスやキャッシュと同じ扱い) ① 状態が事実の記録から動的に導出可能であれば補助テーブルは作らない ② 削除あるいは有効性は、事実の記録とは別のテーブルで表現して結合する ③ 最新を表現するテーブル(ポインタ式 or 完全な実体) 共通 ① スキーマ名・テーブル名・カラム名を日本語(文書化、スキーマで名前空間の整理) ② 更新日時カラムは作らない(すべてINSERT:作成日時のみになる)