# 13ex. System Design Tips ________________________________________ ## ファイル操作 ________________________________________ ### tips1. バッチとファイルの読み書き 1. 読み取り側は、特定のファイル名パターンで読み取る 2. 設置側は、上記のパターンではない名称で設置し最後にリネーム - 移動中ファイルの読み取りによる異常動作を防ぐ ________________________________________ ### tips2. バッチとファイルの操作 1. 各ステップをベルトコンベアや製造業のように考えよ - 現実世界の製造業は、安全性を極限まで高めたベストプラクティスの塊である - StepAはStepA用のWorkフォルダ - StepBはStepB用のWorkフォルダ - StepCはStepC用のWorkフォルダ... - 不具合が発生した場合、即座に停止するようにする ________________________________________ ## Web API ________________________________________ Web API: The Good Parts https://www.oreilly.co.jp/books/9784873116860/ ________________________________________ ### tips1. ベストプラクティス 大原則 : 使いやすく、変更しやすく、頑強なAPIを目指す URI ```text https://api.example.com/v1/users/12345678 1. 強いRESTか、RESTfulか、MVCライク。URIはわかりやすく 2. 大文字を使用しない 3. 単数形と複数形を混在させない(RESTなら複数形が普通) ``` パラメータ ```text 1. ページネーションパラメータは慣習に従う 2. 単純な検索パラメータなら、ネストさせない 3. 省略不可能なものは基本的にはクエリパラメータにしない ``` レスポンス ```text 1. レスポンスボディにリクエスト情報やレスポンスヘッダは不要 2. ただし、200でエラーを返す必要はあるため、これは別途 3. ルート直下はオブジェクトにする - JSON自体はオブジェクトプロパティの右辺が取りうるすべての値がJSON直下にくることを許容しているが、わかりづらいため 4. 続きがある場合はhasNext ``` The JavaScript Object Notation (JSON) Data Interchange Format https://datatracker.ietf.org/doc/html/rfc8259 ________________________________________ ### tips2. リクエスト兼レスポンスdtoの形状 1. リクエストパラメータはクラス直下 2. レスポンスリザルトは、適切なオブジェクト名 or Errors配列 3. 上記二つはわざわざ分けずに、1つのクラスにまとめてしまう ※ dtoを分けたほうが見通しはよくなるため、おすすめはできない ________________________________________ ## DDD ________________________________________ ### tips1. Valueオブジェクトの例 1. ○○Color 2. ○○FileName 3. ○○FileNameWithPath ### tips2. Specification - is○○などの条件が複雑な場合に切り出すオブジェクト - ValueオブジェクトとServiceの中間のようなものになる - 意味が同じコンストラクタ引数で作ればどれでも同じ。Entityのような一意性はない - 実際の挙動は、メソッドの検証対象引数に対する判断の集合という意味でService的