2

静的効用法は、一般的にOO純粋主義者によって眉をひそめています。

しかし、アプリケーション全体でnullチェックのような単純なものを回避するために使用されるユーティリティメソッドについて、人々はどのように感じているのでしょうか。

String.trim()null文字列で呼び出されるとNPEをスローします。だから私はしなければなりません:

if(str!=null) 
     setValue(str.trim());
else
     setValue("");

nullをチェックするユーティリティメソッドを作成するとどうなりますか?

setValue(myTrim(str));

public static String myTrim(String str) {

  if(str==null) return "" 

  else return str.trim();
}

このようなメソッドで私が遭遇した問題の1つは、チームの一部の開発者がこのユーティリティを気に入らない/知らない可能性があり、null比較を行った後に安定した呼び出しを行う可能性があることです。

これはあなたもあなたのフレームワークをしていることですか?はいの場合、人々が作成し、アプリケーションで使用している他の一般的なユーティリティの一般的な使用方法は何ですか?

どちらのアプローチの長所と短所は何だと思いますか?

4

6 に答える 6

3

チームの一部の開発者は、このユーティリティを好まない/知らない可能性があります

それがコミュニケーションの良いところです。そして、私は電子メールを意味しません。

この種の機能について話します。おそらく他のチーム メンバーも同じことを行っており、コミュニケーションをとらないことで、コードと作業が重複しています。

これらのユーティリティ メソッドを使用する方法を見つけたり、経験豊富な開発者がより成熟したライブラリを開発したり、サード パーティを使用したりする可能性があります。

ただし、必ずチームとコミュニケーションをとってください

于 2009-04-15T18:28:26.617 に答える
3

私はオブジェクト指向の純粋主義者ではありません。だから私はこういうものが大好きです。関係のない詳細に行き詰まることなく、自分の意図を反映したコードを簡単に記述できるもの。

書いてください。自分で使用してください。恥ずかしがらずに、コードがどれだけきれいになるかを示してください。最悪の場合、少なくともコードの繰り返しが少し少なくなります...

于 2009-04-15T18:28:27.397 に答える
2

設計原則に関して言えば、より論理的に静的なメソッドにすぎないものがあります。あなたが書いているユーティリティクラスに実際には「状態」がなく、一連の静的メソッドでインスタンス化できないようにする方が論理的であると思われる場合は、そのようにしてください。ただし、クラスが本当にインスタンス化できないことを確認してください (クラスにプライベート コンストラクターを与えます。クラスを抽象として宣言する人を見てきましたが、オーバーライドできるため、それは良くありません)。

次に発生する問題は、クラスがプロジェクト全体である場合、それをライブラリ クラスとして扱う必要があることです。また、ライブラリの作成は、一般的なコードの作成とは異なります。

  • 一般的なコードでは、時期尚早に最適化するのではなく、プロファイリングする必要があります。しかし、ライブラリ メソッドでは、人々が将来あなたの呼び出しをどのように使用するかを予測することはできません。
  • メソッドの動作を文書化したり、明確に名前を付けたりするには、細心の注意を払う必要があります。
  • 一般的な動作を与える必要があり、その時点で必要な特定の機能に目がくらむ必要はありません (たとえば、「文字列をトークン化する」方法がある場合、空のトークンをどうしますか?それらを無視する必要がある場合) 、他の呼び出し元があなたのメソッドを呼び出しますか?)
于 2009-04-15T20:02:32.023 に答える
1

私は多くのユーティリティ関数を使用しています。「オブジェクト」を必要としないものもいくつかありますが、trim() の特定の例は好きではありません。

null の文字列への参照は、空の文字列とは大きく異なります。アプリが非常に単純で、常に null 参照を "" として読み取りたいことがわかっている場合を除き、私はそうしません。この場合、私は次のことを好みます。

setValue((str != null) ? str.trim() : "")

私にとって、キャッチされていない NPE は、アプリケーションで重大なエラーが発生していることを示す良い兆候です。

于 2009-04-15T21:50:37.100 に答える