Java ネットワーク ライブラリとそれを利用するアプリケーションの両方を構築しています。ライブラリは次のもので構成されています。
- バイトのパケットを送受信するためのメソッドを持つインターフェース PacketSocket。
- それの 2 つの実装、1 つは TCP 経由、もう 1 つは UDP 経由です。
- PacketSocket の上に構築され、オブジェクトのバイト パケットへのシリアル化を処理する ObjectConnection クラス。
アプリケーションは、UDPPacketSocket の上で RequestConnection を使用します。UDPPacketSocket の実装は、配信を保証するかどうかをパケットごとに指定できるという点で独特です。アプリケーション内から使用できるようにしたいのですが、ObjectConnection および PacketSocket インターフェイスを経由する方法がありません。
もちろん、これらのインターフェイスの適用可能なメソッドにブール値の保証されたパラメーターを追加することもできますが、最終的には (PacketSocket の実装がさらに増えると)、特定の実装のみに固有で他の実装では無視されるパラメーターをさらに多く追加する必要があります。 .
代わりに、次のように、UDPPacketSocket の静的なスレッド ローカル プロパティを使用してそれを行うことができます。
class Application {
public void sendStuff() {
// is stored in a ThreadLocal, so this code is still thread-safe
UDPPacketSocket.setGuaranteed(true);
try {
myObjCon.send(...);
} finally {
// ... restore old value of guaranteed
}
}
}
そのようなアプローチについてどう思いますか?