問題タブ [design-guidelines]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Google スタイル ガイド (セクション前方宣言)
序文
Google Style Guide には、前方宣言の欠点のリストが含まれています
前方宣言は依存関係を隠すことができるため、ユーザー コードはヘッダーが変更されたときに必要な再コンパイルをスキップできます。
前方宣言は、その後のライブラリの変更によって壊れる可能性があります。関数とテンプレートの前方宣言により、ヘッダーの所有者は、パラメーターの型の拡張、既定値を持つテンプレート パラメーターの追加、新しい名前空間への移行など、互換性のある変更を API に加えることができなくなります。
名前空間 std:: からシンボルを前方宣言すると、未定義の動作が発生します。
前方宣言または完全な #include が必要かどうかを判断するのは難しい場合があります。#include を前方宣言に置き換えると、コードの意味が暗黙のうちに変更される可能性があります。
コード:
#include が B および D の前方宣言に置き換えられた場合、test() は f(void*) を呼び出します。
ヘッダーから複数のシンボルを前方宣言すると、単にヘッダーを #include するよりも冗長になる場合があります。
前方宣言を有効にするコードを構造化すると (たとえば、オブジェクト メンバーの代わりにポインター メンバーを使用する)、コードが遅くなり、より複雑になる可能性があります。
質問
ヘッダーが変更されたときに前方宣言が必要な再コンパイルをスキップする単一のシナリオを思いつくことができないため、最初の点に特に興味があります。これがどのように起こるか誰か教えてもらえますか? それとも、これはGoogleコードベースに固有のものですか?
これはリストの最初のポイントであるため、かなり重要と思われます。
bluetooth-lowenergy - PCB トラック アンテナまたは BLE 5 用の SMD チップ アンテナ?
Bluetooth 5 を介したデータ転送用のアンテナを選択するオプションについて言及しています。これらの 2 つの SMD チップ アンテナまたは PCB トラック アンテナのいずれかを選択するためのガイドライン。
ありがとう。
rest - レコードのリストの挿入/更新に使用されている場合、REST API を設計するための標準的な方法は何ですか?
データベース内のレコードを挿入および更新するために使用される API を構築しています。そのため、キーに基づいてレコードが存在する場合はレコードが更新され、存在しない場合は挿入されます。
2 つの質問があります。
- REST ガイドラインに従って、PUT / POST OR PATCH などの API を設計するためのオプションは何ですか? オブジェクトのリストはどのように表現する必要がありますか? 注:RESTガイドラインに従ってどうあるべきかについて混乱があることを読んだ他の回答から知っています。したがって、一般的なベスト プラクティスに関するガイダンスを得ることができれば問題ありません (REST の部分に関係なく)。
- 第二に、私が本当に混乱している部分は、これの出力を表す方法またはこの API が何を返すべきかということです。
上記のトピックに関する具体的なガイダンス/情報をいただければ幸いです。
c# - 予期しない(骨の折れる)例外と予想される(外因性)例外を区別する方法は?
この投稿では、@Eric Lippert による例外の分類を使用します。これは、ここで見つけることができます: Vexing exceptions
この場合の最も重要なもの:
骨の折れる例外はあなた自身の過ちです。それらを防ぐことができたので、コードのバグです。それらを捕まえてはいけません。そうすることは、コードのバグを隠すことです。むしろ、そもそも例外が発生しないようにコードを記述して、キャッチする必要がないようにする必要があります。
外因性例外は、不幸な設計上の選択の結果ではないことを除けば、やや厄介な例外に似ているように見えます。むしろ、それらは、整頓されていない外部の現実が、美しく鮮明なプログラム ロジックに影響を与えた結果です。予期しない外因性条件を示す例外を常に処理します。一般に、考えられるすべての障害を予測することは価値がなく、実用的でもありません。操作を試して、例外を処理する準備をしてください。
おそらくすべての開発者が経験したように、大規模なエンタープライズ ソフトウェアでは骨の折れる例外を 100% 回避することはできません。
骨の折れる例外がスローされるという不幸な状況では、私はユーザーに知らせたいので、彼は私たちにバグを報告します (第 3 レベルのサポート)。また、この場合、ログレベル「エラー」のメッセージをログに記録したいと考えています。
外因性の例外については、ヒントを含むより具体的なメッセージをユーザーに表示したいと思います。おそらく、ユーザーは自分で問題を解決できるからです (おそらく、第 1 レベルまたは第 2 レベルのサポートの助けを借りて)。
私が現在これを達成する方法は、低レベルのコンポーネントで明示的に外因性の例外のみをキャッチし、それらをカスタム例外にラップすることです。最上層 (私の場合は MVVM WPF アプリケーションの ViewModel) で、カスタム例外を明示的にキャッチして、警告を表示します。2 番目の catch ブロックでは、一般的な例外をキャッチしてエラーを表示します。
これは、エンタープライズ アプリケーションで骨の折れる例外と外因性の例外を区別するための一般的で適切な方法ですか? より良いアプローチはありますか?それとも、まったく必要ありませんか?
この記事dotnetpro - Implementierungsausnahmen を読んだ後、ログに記録するときにより多くのコンテキスト情報を提供するために、すべての (骨の折れる) 例外をカスタム例外にラップする必要があるかどうかも疑問に思っています。
すべての例外のラップについて、次の投稿を見つけました: stackoverflow - 一般的な例外をキャッチしてラップする必要がありますか? およびstackoverflow - 考えられるすべての特定の例外をキャッチする必要がありますか、それとも一般的な例外だけをキャッチしてカスタム例外でラップする必要がありますか? それはかなり議論の余地があり、ユースケースに依存しているように見えるので、私の場合はわかりません.
ViewModel での高レベルの catch ハンドラーの例:
低レベルの例外ラッピングの例: