数ヶ月前、私は新しいプロジェクトで働き始めました。コードを調べてみると、使用されている静的メソッドの量が多くなりました。としてのユーティリティメソッドだけcollectionToCsvString(Collection<E> elements)
でなく、多くのビジネスロジックも保持されます。
私はこの背後にある理論的根拠の責任者に尋ねたとき、彼はそれが春の専制政治から逃げる方法だと言った。この思考プロセスに何かがあります:顧客の領収書作成方法を実装するために、サービスがあります
@Service
public class CustomerReceiptCreationService {
public CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
さて、この男は、基本的にはクライアントクラスがSpring Beanでなければならないという制限を課しているため、Springによって不必要に管理されるクラスを持つことを嫌うと言いました。最終的にすべてをSpringで管理することになります。これにより、手順を踏まずにステートレスオブジェクトを操作する必要が生じます。ここに記載されている内容は多かれ少なかれhttps://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
したがって、上記のコードの代わりに、彼は
public class CustomerReceiptCreator {
public static CustomerReceipt createReceipt(Object... args) {
CustomerReceipt receipt = new CustomerReceipt();
// creation logic
return receipt;
}
}
私は可能な限りSpringがクラスを管理することを避ける点まで議論することができましたが、私が見ないのはすべてが静的であることの利点です。これらの静的メソッドもステートレスなので、あまりオブジェクト指向ではありません。私は何かにもっと快適に感じるだろう
new CustomerReceiptCreator().createReceipt()
彼は、静的メソッドにはいくつかの追加の利点があると主張しています。すなわち:
- 読みやすい。静的メソッドをインポートすると、アクションを気にするだけで、どのクラスがそれを行っているのかは気にしません。
- 明らかに、DB呼び出しのないメソッドなので、パフォーマンス面では安価です。潜在的なクライアントがコードを調べて確認する必要があるように、明確にするのは良いことです。
- テストを簡単に記述できます。
しかし、これには完全に正しくない何かがあると感じているので、これに関するベテランの開発者の考えを聞きたいと思います。
だから私の質問は、このプログラミング方法の潜在的な落とし穴は何ですか?
static
メソッドは、通常のファクトリメソッドです。ファクトリメソッドを静的にすることは、多くの説得力のある理由から、一般的に受け入れられている慣習です。ここでファクトリメソッドが適切かどうかは、別の問題です。