私は本質的にHTTPサーバーであるエンタープライズJavaアプリケーションに取り組んでいます。そこで、解析、ファイルI / Oなどにいくつかの定数とある種のユーティリティ関数を使用する必要があります。この目的で静的メソッドと変数を使用しましたが、この目的で静的を使用することは悪い選択であると誰かが指摘しました。パフォーマンスとメモリの観点。
私はこの議論に同意しませんが、他の選択肢も見当たりません。それらをインスタンスメソッドに変換し、シングルトンインスタンスを介してアクセスしても、インスタンスは何らかの静的関数によってアクセスされます。
だから、これが本当に問題なのか知りたい。もしそうなら、それを修正するための最良のアプローチは何ですか?
前もって感謝します。
最終的にすべてが静的main()
メソッドから実行されるというのはまったく正しいことです。そして、多くの関数は静的にするのに適しています。たとえば、のような単純なメソッドjava.lang.Math
です。速度とメモリ使用量は問題ではありません。静的メソッドは、他のどのメソッドよりも多くのメモリを消費したり、実行速度が低下したりすることはありません。内部的には、他のメソッドとまったく同じですが、クラスのインスタンスではなくクラスインスタンスで定義および実行されます。
静的メソッドで私が見つけた問題は、いくつかの特定の仮定(たとえば、ディレクトリがどこにあるか)をうっかりスリップしてしまい、他の場所で関数を再利用するのが難しくなることです。また、コードのテストがはるかに難しくなる可能性があります。単体テストを行う場合、通常は、*時間のかかる)I / Oを実行せずにテストできるようにする必要があります。たとえば、I / Oパーツをモックまたはスタブアウトします。あなたの方法がそれを許さないなら、それははるかに難しいです。シングルトンクラスは、同様のテストの問題を引き起こす可能性があります。
静的メソッドは、オブジェクト指向のコードではなく、機能的または手続き的なコードにつながる傾向があります。静的メソッドは、オブジェクトのリッチドメインモデルの上にある「シンタックスシュガー」の機能レイヤーとして役立つと思います。
また、Apache Commons IO、Google Guavaなど、既存のユーティリティクラスがたくさんあることにも言及する価値があります。それらはよく書かれており、頻繁に使用され、十分にテストされています。車輪の再発明をする前に、それらを見ることを検討するかもしれません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加