我有这样的构造:
private Plan createPlan() {
return new Plan(
project(),
"Plan Name", "PLANKEY")
.description("Plan created from (enter repository url of your
plan)")
.stages(
new Stage("Stage 1")
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”))),
new Stage("Stage 2”)
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”))),
new Stage("Stage 3”)
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”))),
new Stage("Stage 4”)
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”))),
);
}
如何避免重复代码?除了新阶段的名称(“第一阶段”,“第二阶段”,“第三阶段” ...)外,“新阶段”中的代码段是相同的,具有相同的参数。
谢谢!
答案 0 :(得分:1)
提取方法:
private Stage createStage(String name) {
return new Stage(name)
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”))
}
并简单地传递阶段名称
...
.stages(createStage("Stage 1"), createStage("Stage 2"), createStage("Stage 3"), createStage("Stage 4"))
答案 1 :(得分:1)
(漫长而艰难的解决方案(但以后会为您带来好处)) 一种解决方案是使用Factory设计模式隐藏实例创建:https://www.youtube.com/watch?v=ub0DXaeV6hA
如果您不想编写长类安装,通常就是解决方案。
(简便快捷的解决方案): 您还可以制作一个名为CreateStage(String stageName)的方法,该方法接受String输入,即舞台的名称,并返回一个新创建的Stage对象:
public Stage CreateStage(String stageName){
return new Stage(stageName)
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”)));
}
只需在您的stage集合中为每个阶段调用它即可。 :-)
有关更多提示,请参阅Google:如何避免代码重复。
答案 2 :(得分:0)
在尝试过度优化代码时要小心。如果计划有四个阶段,那么您将需要添加四个阶段。您可以添加一个循环,但这意味着您有一些循环值的来源,例如某种列表。就个人而言,我会坚持使用您拥有的东西,直到您的要求导致您重构为止。
答案 3 :(得分:0)
这假定功能阶段将阶段数组作为参数。创建阶段列表,然后转换为数组并将其传递。
private Plan createPlan() {
List<Stage> stagesList = new ArrayList<>();
for(int i = 1; i < 5; i++) {
stages.add(new Stage("Stage " + i)
.jobs(new Job("Build & run", "RUN")
.tasks(
new ScriptTask().inlineBody("echo Hello!”)))
} // end of for
Stage[] stagesArray = new Stage[stagesList];
stagesArray = stagesList.toArray(stagesArray);
return new Plan(
project(),
"Plan Name", "PLANKEY")
.description("Plan created from (enter repository url of your
plan)")
.stages(stagesArray);
} // end of createPlan
答案 4 :(得分:0)
您将同一对象添加4次:
idDataStore.lookupSegments(id)
为什么不将其分配给变量,而只是使用它呢?
Job commonJob = new Job("Build & run", "RUN").tasks(
new ScriptTask().inlineBody("echo Hello!”));
这还是不理想的,因为您必须“手动”创建new Stage("Stage 1").jobs(commonJob),
new Stage("Stage 2").jobs(commonJob),
...
对象。如果Stage
具有var-args签名Plan#stages
,则可以使用Plan.stages(Stage ... stages)
。
for-loop
,然后在Stage[] stages = new Stage[4];
for(int i = 0; i < stages.length; i ++) {
stages[i] = new Stage("Stage " + (i + 1)).jobs(commonJob);
}
或者,如果您希望使用new Plan().stages(stages);
java-9
方法,甚至可以采用功能性方式进行操作:
IntStream.interate