我使用 FooBuilder 类来构建 Foo 类的对象。 FooBuilder.create
接受一些初始参数,例如 id
或 name
。构建器不包含任何状态。
通常我会这样做
class FooBuilder {
public static Foo create(...)
但是由于我工作的代码库使用 Spring在任何地方,是否仍然值得使用静态方法或更好地使其非静态并使用 Spring FooBuilder 单例?
除了与其余代码的一致性之外,还有其他支持/反对的论点吗?可扩展性(Spring+1,可以向构建器添加一些自定义)?测试(+1 Spring,很难模拟静态)? KISS(static
很简单)?
编辑:
- Foo 需要在编译时构建(
name
或id
可以更改),构建器保持不变
最佳答案
由于您已经在使用 Spring,因此最好将其定义为 Spring 单例。这使得通过注入(inject)模拟构建器而不是真实的构建器来测试其他依赖服务变得更容易。
您可能希望将来对构建器进行子类化并重写某些方法,而使用静态方法是不可行的。
此外,您可能希望将来对 bean 应用一些 AOP,例如日志记录、安全性或性能跟踪,而使用静态会使其变得更加困难。
一般来说,使用 Spring 单例更加灵活,并且最好尝试减少静态方法的使用,仅使用非常通用的实用方法。
另请查看这篇关于 Tips for avoiding Static Method Overuse 的帖子。
关于java - 当我到处使用 Spring 时,是否值得拥有一个静态 Builder 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22544340/