これが、望ましくないクラスファイルへのアクセスを防ぐ良い方法だと人々が言う理由を理解しようとしていますが、リフレクションを使用してクラスにアクセスすることはできませんか? リフレクションを使っていてもあなたのコードが何をするのか誰も知らないので、不正アクセスを防ぐための難読化の方が良いのではないでしょうか?
3 に答える
カプセル化とは、バックエンド コードへのアクセスを防止することではなく、境界を表すことです。プログラマーがスケーラブルで変更可能なコードを簡単に作成するのに役立ちます。ここから、「関心の分離」のような原則が生まれます。
カプセル化のポイントは、よりクリーンなコードのために実装内部クラスへのアクセスを防止することであり、クラスのユーザーがリフレクションを使用してインスタンスにアクセスしたり、逆コンパイルしたりすることを技術的に防止することではありません。
たとえば、HTTP クライアントがある場合は、使用するストリームとバッファをカプセル化し、要求と応答のみをクラスの実際のユーザーに公開する必要があります。これは、あなたのコードとそのコードがよりクリーンになるように設計されていますが、クラスに反映されないようにするためではありません。さらに、API ユーザーがアクセスしているのは外部 API だけであるため、クラスやコードの内部を好きなだけ自由に変更できます。
カプセル化は、他のプログラマーがデータに対して何をすべきか、何をすべきでないかを伝える方法です。彼らはいつでもこれを回避することができますが、それをわずかに難しくすることで、カプセル化されたデータにアクセスするときは非常に注意するよう効果的に伝え、いつでも実装を変更してそれに依存するコードを壊す可能性があることを警告します.
カプセル化は、悪意のあるアクセスからコードとデータを保護する DRM のような方法ではありません。