リーンコードパス
実際の操作から始めます。呼び出し元は何を表示したり操作したりするのでしょうか?その要件をAPI、サービス、ミドルウェア、ORM、実行されたSQLまで追跡します。影響を受けるパスの最も早いポイントで不要な作業を排除します。日常的な開発では、シンプルで低コストなコードを使用します。より複雑な最適化を導入する前に、ボトルネックを特定します。
実装ルール
- リクエストで既に利用可能なデータを再利用します。操作がサポートする場合は、クエリ、書き込み、リモートコールをバッチ処理します。実際の制限でバッチを分割します。バルクAPIが内部で何を行っているかを確認します。並列のアイテムごとの呼び出しでも、アイテムごとに1回のラウンドトリップが発生します。
- アクセスパターンに合わせてデータ構造を選択します。単一のルックアップのために既存のコレクションをスキャンします。繰り返しマッチングを行う場合は、キー付きマップを一度構築します。ループの外に不変のパース処理や計算を移動します。ホットパスでは、繰り返しのソート、大きなコピー、使用されない中間コレクションを排除します。同一形状を変換するためにJSONを介してラウンドトリップする代わりに、プロセス内で既存の値を渡します。
- 外部入力はそれが入ってくる時点でパースおよび検証します。内部関数は、エントリポイントがすでに存在、型、または範囲をチェックした値を使用できます。防御的な分岐を追加する前に、到達可能な入力とその分岐が防ぐ障害を特定します。コードが回復できる場所、有用なコンテキストを追加できる場所、または異なるエラー契約に変換できる場所でエラーをキャッチします。
- 可能な場合は、読み取りまたは書き込み述語に所有権を含めます。検証済みのタスクID、所有権、引数を信頼できるモジュール、スケジューラ、エグゼキュータに渡します。同じタスク内のハンドオフ、コールバック、または委任は、それ自体では別のチェックやルックアップを必要としません。新しい入力や独立した信頼境界が関与する場合は、受信側が継承できない保証を検証します。残高、事前状態、冪等性などの可変条件は、それらに依存する書き込みでアトミックに強制します。
- 適切なフレームワークのデフォルトを使用するか、固定ルールを一度だけ属する場所に定義します。実際のデプロイの違い、独立したチューニングの必要性、または明示的なユーザー要求がある場合にのみ、設定を追加します。最初に既存の設定またはシークレットストアを使用します。既存のメカニズムが要件を満たせない場合にのみ、ファイルを作成します。要求された場合にのみ、機能スイッチを追加します。
- 一意制約、条件付き書き込み、アトミックインクリメント、短いトランザクションを優先します。アプリケーションロックを追加する前に、競合する操作、誤った結果、および既存のメカニズムがそれを防げない理由を特定します。最小のリソースを最短の間隔でロックします。既存のロックを削除する前に、すべてのライターと遅延結果をチェックします。
- アクセスルール、順序付け、ページネーション、部分成功セマンティクス、出力品質、およびリカバリを維持します。動作やコストの大幅な変更については、ユーザーと話し合います。プロジェクトのミドルウェア、テストエントリポイント、および受け入れ基準を再利用します。
関連リファレンスを読む
- SQL、ORMの動作、インデックス、バルク操作、トランザクション、ロックについては、データベースアクセスとトランザクションを参照してください。
- APIフィールド選択、ミドルウェア、キャッシング、キュー、大きなファイル、フロントエンドの読み込みについては、ランタイムとミドルウェアの該当セクションを参照してください。
検証
- 変更されたAPIを、承認済みテスト環境で実際のアプリケーションエントリポイントを通じて実行します。レスポンス、影響を受ける呼び出し元、最終的なビジネス状態を確認します。フィールドをトリミングする場合は、実際のペイロードと、データベースバックエンドのパスでは実行されたSQLを検査します。バッチ処理の場合は、小バッチとフルバッチのクエリカウントを比較します。副作用が関与する場合は、該当する競合、重複リクエスト、またはリカバリパスをテストします。バックグラウンドジョブとローカル計算は、通常のエントリポイントを通じて検証し、その出力を検査します。必要なプロジェクトチェックとCIに従います。
- ユーザーはビジュアルおよび手動によるWeb受け入れを担当します。ページ、アクション、期待される結果を引き渡し、その受け入れを「保留中」としてマークします。フロントエンドの変更については、該当するビルド、型、またはインタラクションチェックを実行します。ユーザーがブラウザテストを委任する場合は、要求された範囲をカバーします。
- 高速化の主張は、同じ環境、同等のデータと同時実行性の下で、変更前後の測定値で裏付けます。サンプル数とキャッシュ状態を記録します。調査対象のコストを明らかにするメトリクス(テールレイテンシ、スループット、クエリ数、スキャン行数、転送バイト数、ピークメモリなど)を選択します。非同期作業の場合は、受け入れ、キュー遅延、完了を区別します。単一の実行は単一の実行として報告します。比較可能なベースラインがない場合は、測定したものだけを報告します。検証は変更に比例したものにします。