# 2021-05-06 第12回メンターセッション ## 項目 ### データベースのプライマリーキーについて - 基本的に書いてあるとおり - サロゲートを使わず、自然キーを使っているときはプライマリキーは変更することがある(中間テーブルなど) - 「プライマリキーは必須」ではなく「サロゲートキーは必須」では? - 「データを一意に特定できる情報」がプライマリキー - 何かしら制約条件は必要なはず - サロゲートキーか複合キーか? - いま一意に特定できている条件が将来変わることがあるかどうか、を考える - プライマリキーの変更はロックの範囲が広くなったりすることもあるので、そういうところでも注意が必要 ### 抽象クラスのテストについて - extends先で上書かれることもあるので、書かなくてもいいかも - extendsしてつくったclassをテストしたほうがいいかも - abstractの使いみちについては、諸説ある - interfaceで十分なのでは? - abstractに書く実装は、helperとして外に出してDIしたほうがいいのでは? - Javaのfinalがほしいですね ### ログ出力について - ログイン出力というのがドメイン的にどこまで重要かによる - 絶対に握りつぶされたくない例外は、発生したレイヤーですぐthrowしたほうがいいと思う - そうじゃないならキャッチした側が一括でするでもいい - throw e をすればスタックトレースは保持される ### Jestでエラーの型を確認する方法 - typescript 2.2以降でbaseclassの継承がうまくいかない状況が起きている? - toBeInstanceOfではなく、toThrowErrorでやる - TypeScriptは構造的部分型というものを採用しているのでうまく動かない(らしい) ### オブジェクトの生成元を制限する - リポジトリにはドメインオブジェクト渡したい - 構造的部分型の問題(型さえあってれば全然関係ないものも渡せる)があるので、DTO渡したときに変なことになることを防ぎたい気持ちがある - getterを排除したい気持ちもある - ドメインルールが漏れ出すことがある - convertToDTOForPersistanceとかいう名前にするのはどうかね ### インデックスシグネチャについて - 等価比較をチームで統一したいので、valueObjectの抽象クラスにisEqualをもたせた(抽象化のメリットの話) - インデックスシグネチャにanyを設定するのは怖い - 辞書的な使い方をしたいときはインデックスシグネチャつかう - ユーザーにドロップダウンリストを見せたいときとか ###### tags: `Team-2`