コード CR テンプレート#
基礎編#
-
コーディングスタイルはアリババ Java 開発ガイドに従うこと
-
大規模で複雑なフロープログラムは、フローチャートとシーケンス図を提供する必要があります。
- CR の開始時に、プロジェクトの規模と背景を簡単に説明する必要があります。複雑なフローの場合、CR は実装ロジックが技術的なソリューションと一致しているかどうかを確認し、実装と技術的なギャップを減らす必要があります。
-
ビジネスロジックの分割が適切か、結合しているかどうかを確認します。
- ビジネスロジックには、ドメインのロジックが関与しており、明示的または結合したビジネスロジックは分割することをお勧めします。
-
コードのロジックが明確かどうかを確認します。
- CR の学生は、主要なロジックを明確に説明する必要があります。
-
適切で効果的なコメント
- ロジックが複雑なコードや CR に疑問があるロジックには、適切で効果的なコメントを追加する必要があります。
-
冗長なコードが存在するかどうかを確認します。
- 不要または参照されていないコードは削除することをお勧めします。
-
潜在的な NPE が存在するかどうかを確認します。
-
NPE は日常的なバグです
コンテキストフィールドの使用時に null チェックが行われず、getXX () 操作、プリミティブ型のアンボクシングなど、防御的な判断または Optional が必要です。
-
-
ログの出力規則
-
ログの出力にはプレースホルダを使用することを強制します。文字列の連結には StringBuilder の append () メソッドが使用され、パフォーマンスの低下が発生する可能性があります。
logger.info("are u ok : oid 1", oid);
logger.info("are u ok : oid 1", oid);
-
-
Maven の依存関係の競合があるかどうかを確認します。
- 多くの場合、実行時の奇妙なバグは依存関係の競合によるものです。CR は pom の変更を確認することをお勧めします。
-
リソースの解放
- ネットワーク I/O またはファイル I/O、リソースの解放ロジックは CR によって確認される必要があります。
-
統一されたエラーコード
- -1、500 などのエラーコードの統一的な返却は禁止されています。できるだけ列挙型を定義し、問題の追跡を容易にすることをお勧めします。
-
例外の処理
- 例外が発生する場所では、直接返却、例外のスロー、再試行処理、復旧処理、サーキットブレーカー処理、ダウングレード処理、ビジネスのクローズなど、必要な操作を確認する必要があります。
初級編#
-
データベースのインデックス設計が適切か、有効かどうかを確認します。
- CR の学生は、インデックスの設計理由と効果を明確に説明する必要があります。
-
コードにデザインパターンを使用できるか、またはデザインパタンが過度に使用されていないかを確認します。
- if/else が多すぎる場合や、シーン分岐クラスのロジックの場合、ストラテジーパタンを使用することをお勧めします。
- 小さな要件に対して複雑な継承抽象ロジックを行うことはお勧めしません。良い設計はモデルの合理的なものです。
- 単純な問題を解決するために複雑なフレームワークを導入することはお勧めしません。一部の学生は、すべてのアーキテクチャを 1 つのフレームワークで完結させることに熱心です(例:ddd cola)。コードの歴史や複雑さはフレームワークで評価できず、良いビジネスフレームワークのスケルトンはこのような考え方で問題を解決する傾向があります。
-
ミドルウェアの使用がベストプラクティスに準拠しているかどうかを確認します。
- 例えば、MQ の消費が正しく ACK されているか、リトライが必要か、破棄が必要かなどを確認します。
- 例えば、Redis に大きなキーの設計があるか、適切な設計が必要かを確認します。
- 例えば、ES のクエリに適切なタイムアウトが設定されているかを確認します。
-
スレッドプールの使用、パラメータの正確性、ビジネスの分離が正しいかどうかを確認します。
- 会社のフレームワークまたは JDK の組み込みパラメータ付きスレッドプールの構築方法を使用しているかどうかを確認します。
- スレッド数やキューサイズが適切に設定されているかどうかを確認します。
- 複数のビジネスまたは呼び出し元に対して、分離スレッドプールが設定されているかどうかを確認します。
-
ロックを使用する場合、ロックの範囲と粒度が適切かどうかを確認します。
- 分散ロックのロック範囲が他に影響を与えないかを確認する必要があります。
-
トランザクション処理:トランザクションが必要かどうか、トランザクションが有効かどうかを確認します。
- パーシステント操作にトランザクションが追加されていないかを確認します。
- クラス内での呼び出しによってトランザクションが有効になっていないかを確認します。
上級編#
パフォーマンスの最適化#
-
キャッシュが必要な場所にキャッシュを追加する必要があります。
- 依存する外部インターフェースのパフォーマンスが低い場合、適切なキャッシュを追加してクエリの問題を解決します。
-
悲観的ロックの代わりに楽観的ロックを使用します。
-
複数のインターフェースの集約にはマルチスレッドを使用して加速します。
一貫性#
幂等性#
-
ステータスベースの幂等性
- ステータスベースとは、このインターフェースを呼び出すと、ステータスが変化することを意味します。ステータスが既に変化している場合は、以前の結果を直接返します。
-
特定のキーに基づく幂等性
- 通常、個別のフィールドをバインドするか、ログテーブルを使用して記録します。存在する場合は、直接結果を返します。
リトライ#
- インターフェース呼び出しの失敗時のリトライ
- 書き込み操作がある外部インターフェースの場合、リトライは推奨されません。外部からの再リクエストを待つようにしてください。
- 提供されるインターフェースが幂等な応答をサポートしているかどうかを確認します。