ユーティリティクラスDateUtil(以下を参照)があるとします。このメソッドを使用するには、呼び出し元のメソッドでDateUtils.getDateAsString(aDate)を使用します。 static修飾子を削除し、DateUtilをSpring Bean(DateUtilsBeanを参照)にして、呼び出し元のクラスに挿入するか、そのままにしておく方が良いでしょうか?
Staticを使用する際に見られる1つの欠点は、モッキングに関する問題です( staticメソッドでモックする方法は? を参照してください)
public class DateUtils {
public static String getDateAsString(Date date) {
String retValue = "" // do something here using date parameter
return retValue;
}
}
Spring Beanバージョン
@Component
public class DateUtilsBean {
public String getDateAsString(Date date) {
String retValue = "" // do something here using date parameter
return retValue;
}
}
私はそうは思いません。 DateUtilsクラスは、副作用がなく、入力パラメーターを処理するだけの純粋なユーティリティクラスのように聞こえます。この種の機能は、静的メソッドに残っている場合もあります。日付ヘルパーメソッドをモックしたいと思うことはあまりありません。
私はショーン・パトリック・フロイドに同意します。
これが私の基準です。クラスのメソッドが、受け取ったパラメーターに対してのみ実行し、外部の依存関係(データベース、ファイルシステム、ユーザー構成、その他のオブジェクト/ Beanなど)がない場合、静的メソッドを使用します。 、通常はプライベートコンストラクタを持つ最終クラスです。
それ以外の場合は、Spring Beanを使用して実装します。
したがって、あなたが提起する場合、この基準に従って、静的メソッドを含むクラスを記述します。
よろしく。
そのライフサイクルはSpringによって管理されるため、Spring Beanとして宣言する方が適切です。最終的には依存関係を注入し、オブジェクトをプールし、適切な方法でテストすることができます。これを通常のオブジェクトとして使用し、パラメーターとして渡し、サブクラスでメソッドを再定義します...など。
要するに、はい、ほとんどの場合、それはより良い設計です。それでも、露出したものと同じくらい単純な場合では、大きな違いはありません。