データベース接続と、場合によっては要求/応答オブジェクトにスレッド ローカル ストレージを使用しました。2 つの例を挙げると、どちらも Java webapp 環境からのものですが、原則は保持されます。
Web アプリは、さまざまなサブシステムを呼び出す大量のコードで構成されている場合があります。これらの多くは、データベースにアクセスする必要がある場合があります。私の場合、db が db プールから db 接続を取得し、接続を使用し、接続をプールに返す必要がある各サブシステムを作成しました。スレッド ローカル ストレージは、より単純な代替手段を提供します。リクエストが作成されると、プールからデータベース接続をフェッチし、それをスレッド ローカル ストレージに格納します。各サブシステムは、スレッド ローカル ストレージからの db 接続を使用するだけで、リクエストが完了すると、接続を db プールに返します。このソリューションにはパフォーマンス上の利点がありましたが、データベース接続をすべてのレベルに渡す必要もありませんでした。つまり、パラメーター リストは短くなりました。
同じ Web アプリで、1 つのリモート サブシステムで、Web Request オブジェクトを実際に表示することにしました。そのため、このオブジェクトを最後まで渡すようにリファクタリングする必要がありましたが、これには多くのパラメーターの受け渡しとリファクタリングが必要でした。または、単にオブジェクトをスレッド ローカル ストレージに配置して、必要なときに取得することもできました。
どちらの場合も、そもそも設計を台無しにして、ベーコンを保存するために Thread Local ストレージを使用しただけだと主張することができます。あなたはポイントを持っているかもしれません。しかし、スレッド ローカルは、スレッド セーフを維持しながら、よりクリーンなコードを作成したと主張することもできます。
もちろん、スレッド ローカルに入れているものが実際にスレッドごとに 1 つだけであることを十分に確認する必要がありました。Web アプリの場合、Request オブジェクトまたはデータベース接続がこの説明にうまく適合します。