【发布时间】:2016-09-12 00:21:39
【问题描述】:
我有一个类,其中根据新的 api 集成添加了许多参数。
例如,之前我有一个有 4 个参数的类:
Integer a;
String b;
Map<String, String> c;
List<Integer> e.
所以构造函数是:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
}
几个团队已经在他们的代码中使用这个构造函数与我的 API 集成。 过了一段时间,这个类中添加了一个新参数。即
Double d;
所以我添加了一个新的构造函数:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e,
Double d)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
this.d = d;
}
我将之前的构造函数标记为已弃用。我没有删除以前的构造函数,因为如果删除,客户端的代码会中断。
随着新参数的添加,我现在有了带有 5 个参数的构造函数。
是否有关于如何弃用/删除构造函数的最佳实践,以免发生这种情况?
【问题讨论】:
-
不确定这是否是个好主意,但您可以尝试使用Lombok builder 模式。唯一的问题(我想知道这是否是您的答案)是 Lombok 依赖于以这种方式创建实例:
Type.builder.param1(valueParam1).others(valueOthers).(...) ... (...).build,这是您以前的客户所没有的。可是你跟他们谈判,他们做不到吗?我的意思是 Lombok 为您提供了一个独立于参数顺序和数字的自我管理的构造函数。 -
使用
builder Pattern并在当前班级使用overloading为constracturs -
我认为应该使用Builder模式。
-
最重要的是要有一个清晰且有文档记录的 API 演进策略。因此,无论您选择哪种方式,您都需要始终如一地遵循它,并且需要记录它。
标签: java design-patterns api-design