@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/04/15/000-exception-catching-logging-error-handling/#article>
    schema:about <https://comcomponent.com/knowledge/exception-catch-boundary/>, <https://comcomponent.com/knowledge/primary-error-log/> ;
    schema:mentions <https://comcomponent.com/knowledge/failure-unit/>, <https://comcomponent.com/knowledge/result-conversion/>, <https://comcomponent.com/knowledge/exception-translation/>, <https://comcomponent.com/knowledge/deep-broad-catch/>, <https://comcomponent.com/knowledge/duplicate-error-logging/>, <https://comcomponent.com/knowledge/diagnosis-difficulty/>, <https://comcomponent.com/knowledge/expected-failure/>, <https://comcomponent.com/knowledge/unexpected-exception/>, <https://comcomponent.com/knowledge/operation-canceled-exception/>, <https://comcomponent.com/knowledge/helper-utility-layer/>, <https://comcomponent.com/knowledge/repository-gateway-layer/>, <https://comcomponent.com/knowledge/usecase-layer/>, <https://comcomponent.com/knowledge/ui-http-job-boundary/>, <https://comcomponent.com/knowledge/unhandled-exception-handler/>, <https://comcomponent.com/knowledge/limited-retry/>, <https://comcomponent.com/knowledge/throw-ex-antipattern/>, <https://comcomponent.com/knowledge/stack-trace-loss/>, <https://comcomponent.com/knowledge/backgroundservice-unhandled-exception/>, <https://comcomponent.com/knowledge/process-restart-strategy/> .

<https://comcomponent.com/knowledge/exception-catch-boundary/> a skos:Concept ;
    skos:prefLabel "例外を捕まえる境界"@ja ;
    skos:definition "画面操作1回・HTTPリクエスト1本・ジョブ1件・メッセージ1件のように、retry・結果化・継続可否を責任を持って判断できる処理の区切りで、例外をcatchすべき場所とされる境界。"@ja ;
    skos:altLabel "catchする境界"@ja ;
    skos:altLabel "処理境界"@ja .

<https://comcomponent.com/knowledge/primary-error-log/> a skos:Concept ;
    skos:prefLabel "主ログ"@ja ;
    skos:definition "1つの失敗に対して1回だけ出す、失敗単位と運用文脈(requestIdやuserIdなど)を伴うErrorまたはCriticalレベルの記録。"@ja ;
    skos:altLabel "主たるErrorログ"@ja ;
    ks:prevents <https://comcomponent.com/knowledge/duplicate-error-logging/> ;
    ks:requires <https://comcomponent.com/knowledge/failure-unit/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/helper-utility-layer/> .

<https://comcomponent.com/knowledge/deep-broad-catch/> a skos:Concept ;
    skos:prefLabel "深い層での広いcatch"@ja ;
    skos:definition "一番深いhelperや共通関数でcatch (Exception)して null や false を返すなど、判断ができない場所で広く例外を受け止めてしまう書き方。"@ja ;
    skos:altLabel "catch(Exception)の乱用"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/helper-utility-layer/> ;
    ks:mayCause <https://comcomponent.com/knowledge/diagnosis-difficulty/> .

<https://comcomponent.com/knowledge/helper-utility-layer/> a skos:Concept ;
    skos:prefLabel "helper/utility/private method層"@ja ;
    skos:definition "文字列変換・パース・計算・内部整形のような、どの画面操作やrequestだったかを知らない、呼び出し階層の一番深い層。"@ja ;
    skos:altLabel "一番深い共通関数"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/exception-catch-boundary/> .

<https://comcomponent.com/knowledge/failure-unit/> a skos:Concept ;
    skos:prefLabel "失敗単位"@ja ;
    skos:definition "画面操作1回、HTTPリクエスト1本、ジョブ1件、メッセージ1件、CSVの1行など、何が1回失敗したかを表す業務上まとまりのある処理の単位。"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/exception-catch-boundary/> .

<https://comcomponent.com/knowledge/diagnosis-difficulty/> a skos:Concept ;
    skos:prefLabel "障害原因追跡の困難"@ja ;
    skos:definition "同じ失敗について原因の区別がつかなくなったり、同じスタックトレースが何本も並んだりして、後から障害の原因を追いにくくなる状態。"@ja .

<https://comcomponent.com/knowledge/duplicate-error-logging/> a skos:Concept ;
    skos:prefLabel "各層での重複ログ"@ja ;
    skos:definition "1回の障害に対してRepository・Service・Controller・未処理例外ハンドラなど複数の層が同じ例外をそれぞれErrorやCriticalとして記録してしまうこと。"@ja ;
    skos:altLabel "重複したErrorログ"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/diagnosis-difficulty/> .

<https://comcomponent.com/knowledge/repository-gateway-layer/> a skos:Concept ;
    skos:prefLabel "Repository/Gateway/SDKラッパー層"@ja ;
    skos:definition "DBドライバ、HTTP通信、ファイルI/O、vendor SDKなど下の層の実装都合が表に出る、外部I/Oを扱う境界の層。"@ja ;
    skos:altLabel "外部I/O境界"@ja ;
    ks:implements <https://comcomponent.com/knowledge/exception-translation/> .

<https://comcomponent.com/knowledge/exception-translation/> a skos:Concept ;
    skos:prefLabel "例外の.NET変換"@ja ;
    skos:definition "下位層の実装都合(ネイティブ側のC++例外・エラーコードや、HttpRequestException・DBドライバ固有の例外など)を、境界のtry/catchによってその層にとって意味のある例外・失敗へ変換すること。"@ja ;
    skos:altLabel "例外変換"@ja .

<https://comcomponent.com/knowledge/limited-retry/> a skos:Concept ;
    skos:prefLabel "局所的なretry"@ja ;
    skos:definition "一時的失敗と分かっている・冪等性がある・上限回数と待ち方が決まっている・失敗時の最終挙動が明確、という4条件が揃うときだけ外部I/O境界で行うretry。"@ja ;
    skos:altLabel "条件付きretry"@ja .

<https://comcomponent.com/knowledge/usecase-layer/> a skos:Concept ;
    skos:prefLabel "Application Service/UseCase層"@ja ;
    skos:definition "保存処理や注文確定、CSV取り込みのようなユースケースとしてまとまりのある単位を扱い、失敗単位を決められる層。"@ja ;
    skos:altLabel "ユースケース層"@ja ;
    ks:implements <https://comcomponent.com/knowledge/result-conversion/> ;
    ks:uses <https://comcomponent.com/knowledge/repository-gateway-layer/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/exception-catch-boundary/> .

<https://comcomponent.com/knowledge/result-conversion/> a skos:Concept ;
    skos:prefLabel "結果化"@ja ;
    skos:definition "例外として投げ続けるのをやめて、Result型や失敗を表すDTOのような戻り値へ変え、想定内の失敗を呼び出し元が分岐で扱える形にすること。"@ja ;
    skos:altLabel "Result型化"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/expected-failure/> .

<https://comcomponent.com/knowledge/expected-failure/> a skos:Concept ;
    skos:prefLabel "想定内の失敗"@ja ;
    skos:definition "validation不備やNotFoundなど、設計の時点であらかじめ決めておける失敗で、ユースケースの単位で結果化して扱われるもの。"@ja .

<https://comcomponent.com/knowledge/ui-http-job-boundary/> a skos:Concept ;
    skos:prefLabel "UI/HTTP/Job/Message境界"@ja ;
    skos:definition "WinForms/WPFの保存ボタン押下、ASP.NET CoreのHTTPリクエスト1本、workerのメッセージ1件のように、何の操作か・誰の操作かを知っている境界で、多くのアプリで主ログ地点になりやすい層。"@ja ;
    skos:altLabel "処理境界(UI/Controller/Job)"@ja ;
    ks:implements <https://comcomponent.com/knowledge/primary-error-log/> ;
    ks:uses <https://comcomponent.com/knowledge/usecase-layer/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/exception-catch-boundary/> .

<https://comcomponent.com/knowledge/operation-canceled-exception/> a skos:Concept ;
    skos:prefLabel "OperationCanceledException"@ja ;
    skos:definition "利用者による中断やシャットダウンによって発生する例外で、制御フローの一部として扱われ、普通はErrorログの対象にしないもの。"@ja ;
    skos:altLabel "利用者キャンセル"@ja ;
    skos:altLabel "ユーザーキャンセル"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/primary-error-log/> ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/unexpected-exception/> .

<https://comcomponent.com/knowledge/throw-ex-antipattern/> a skos:Concept ;
    skos:prefLabel "throw ex;によるスタックトレース書き換え"@ja ;
    skos:definition "再スローの際にthrow ex;と書いてしまうことで、その行でスタックトレースが上書きされてしまう書き方。throw;を使うのが基本とされる。"@ja ;
    skos:altLabel "throw ex;" ;
    ks:mayCause <https://comcomponent.com/knowledge/stack-trace-loss/> .

<https://comcomponent.com/knowledge/stack-trace-loss/> a skos:Concept ;
    skos:prefLabel "スタックトレースの喪失"@ja ;
    skos:definition "本当の例外発生位置を示すスタックトレース情報が失われ、後から原因を追えなくなる状態。"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/diagnosis-difficulty/> .

<https://comcomponent.com/knowledge/unhandled-exception-handler/> a skos:Concept ;
    skos:prefLabel "未処理例外ハンドラ"@ja ;
    skos:definition "AppDomain.UnhandledExceptionやWPFのDispatcherUnhandledException、WinFormsのThreadExceptionなど、回復ポイントではなく最後の記録地点となる、呼び出し階層の最終境界。"@ja ;
    skos:altLabel "AppDomain.UnhandledException" ;
    skos:altLabel "最後の未処理例外ハンドラ"@ja ;
    ks:implements <https://comcomponent.com/knowledge/process-restart-strategy/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/exception-catch-boundary/> .

<https://comcomponent.com/knowledge/process-restart-strategy/> a skos:Concept ;
    skos:prefLabel "終了・再起動導線"@ja ;
    skos:definition "未処理例外ハンドラが担う、最終ログやflush・dump採取に加えて整備すべき、終了コードや再起動のための導線。"@ja .

<https://comcomponent.com/knowledge/backgroundservice-unhandled-exception/> a skos:Concept ;
    skos:prefLabel "BackgroundServiceの未処理例外"@ja ;
    skos:definition ".NET 6以降でBackgroundServiceの未処理例外がログされ、既定でホスト停止に至る挙動。"@ja .

<https://comcomponent.com/knowledge/unexpected-exception/> a skos:Concept ;
    skos:prefLabel "想定外の例外"@ja ;
    skos:definition "NullReferenceExceptionのように処理の前提が崩れたことを示す例外で、その後も状態を信用してよいか怪しいため、request/job境界で主ログして失敗応答にすべきもの。"@ja ;
    skos:altLabel "前提崩れ"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/deep-broad-catch/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/helper-utility-layer/> ;
    schema:description "一番深いhelper/utility/private method層でcatch (Exception)してnull/falseを返すことは推奨されず、後始末・局所ロールバック・例外の翻訳にとどめるべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/failure-unit/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/exception-catch-boundary/> ;
    schema:description "catchする場所は失敗単位を定義できる境界に寄せることが本記事の推奨で、catchできる場所ではなく責任を持って判断できる場所で受けるのが基本とされる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/deep-broad-catch/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/diagnosis-difficulty/> ;
    schema:description "深い共通関数でcatch (Exception)してnullを返すと、呼び出し元はデータが無かったのか途中で壊れたのかを区別できなくなる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/duplicate-error-logging/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/diagnosis-difficulty/> ;
    schema:description "Repository・Service・Controller・未処理例外ハンドラが同じ障害をそれぞれErrorやCriticalで記録すると、同じスタックトレースが何本も並び読む側が困る"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/primary-error-log/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/duplicate-error-logging/> ;
    schema:description "失敗単位と運用文脈がそろう境界だけが主ログを1回出す運用にすると、各層での重複ログを防げる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/repository-gateway-layer/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/exception-translation/> ;
    schema:description "Repository/Gateway/SDKラッパー層は、HttpRequestExceptionやDBドライバ固有の例外など下位実装の都合を、その層で意味のある失敗へ翻訳する役目を担う"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/repository-gateway-layer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/limited-retry/> ;
    schema:description "外部I/O境界では、一時的失敗と分かっている・冪等性がある・上限回数と待ち方が決まっている・失敗時の最終挙動が明確、という条件が揃うときだけ局所的なretryを行う"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/azure/architecture/patterns/retry> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/usecase-layer/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/result-conversion/> ;
    schema:description "Application Service/UseCase層は、validation不備やNotFoundなど想定内の失敗をResultや失敗DTOの形へ変える結果化を担う"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/result-conversion/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/expected-failure/> ;
    schema:description "想定内の失敗は例外として投げ続ける必要はなく、そのユースケースの単位で結果化することが本記事の推奨"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ui-http-job-boundary/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/primary-error-log/> ;
    schema:description "UI/HTTP/Job/Message境界は、何の操作か・誰の操作か・どのrequestかを知っているため、多くのアプリで主ログ地点になりやすい"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/operation-canceled-exception/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/primary-error-log/> ;
    schema:description "利用者キャンセルやシャットダウンによるOperationCanceledExceptionを主ログ(Error)の対象として扱うことは推奨されず、制御フローの一部として扱うべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/throw-ex-antipattern/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/stack-trace-loss/> ;
    schema:description "throw ex;と書くと、その行でスタックトレースが上書きされ、本当の発生位置が失われる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/stack-trace-loss/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/diagnosis-difficulty/> ;
    schema:description "スタックトレースが失われると、後から本当の発生位置や原因を追えなくなる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/unhandled-exception-handler/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/process-restart-strategy/> ;
    schema:description "未処理例外ハンドラの主な責務は最終ログ・flush・dump採取導線に加えて、終了コードや再起動導線の整備までである"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/fundamentals/runtime-libraries/system-appdomain-unhandledexception> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/process-restart-strategy/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/backgroundservice-unhandled-exception/> ;
    schema:description "BackgroundServiceの未処理例外は.NET 6以降ではログされ既定でホスト停止に寄るため、親ループで全部握りつぶすより停止して再起動戦略へ乗せるほうが安全なことがある"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/core/extensions/windows-service> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/operation-canceled-exception/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/unexpected-exception/> ;
    schema:description "catch節は上から順に評価されるため、OperationCanceledExceptionをより具体的な型で先に受け、想定外例外向けの広いcatchより前に置くべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/primary-error-log/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/failure-unit/> ;
    schema:description "主ログは失敗単位とrequestIdやuserIdのような運用文脈を伴うことが前提になる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/usecase-layer/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/repository-gateway-layer/> ;
    schema:description "Application Service/UseCase層はRepository/Gateway/SDKラッパー層を呼び出し、その先で発生し翻訳された例外を受け取る"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ui-http-job-boundary/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usecase-layer/> ;
    schema:description "UI/Controller/Job境界はApplication Service/UseCaseを呼び出し、そこでの結果化や想定外例外を受け取って応答を決める"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/primary-error-log/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/helper-utility-layer/> ;
    schema:description "helper/utility/private method層で主ログを出すことは推奨されず、この層は原則として出さない方針とされる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/primary-error-log/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/repository-gateway-layer/> ;
    schema:description "Repository/Gateway/SDKラッパー層で、上へ再スローするだけなら通常は主ログを出さない方針とされる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/helper-utility-layer/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/exception-catch-boundary/> ;
    schema:description "一番深いhelper/utility/private method層は、画面全体を止めるべきかなどを判断できないため、境界としてcatchするのに向かない"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/usecase-layer/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/exception-catch-boundary/> ;
    schema:description "Application Service/UseCase層は失敗単位を決められる境界として、想定内の失敗を結果化する適地になる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ui-http-job-boundary/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/exception-catch-boundary/> ;
    schema:description "UI/HTTP/Job/Message境界は、多くのアプリで想定外例外をまとめて受ける最も自然な境界になりやすい"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/standard/exceptions/best-practices-for-exceptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/unhandled-exception-handler/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/exception-catch-boundary/> ;
    schema:description "未処理例外ハンドラは回復ポイントではなく最後の記録地点であり、回復のための境界として頼るのは推奨されない。回復戦略はその前のrequest/job境界に置くべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/ja-jp/dotnet/fundamentals/runtime-libraries/system-appdomain-unhandledexception> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
