Skip to content

Instantly share code, notes, and snippets.

@pawelpluta

pawelpluta/Watering.java Secret

Created Jan 19, 2021
Embed
What would you like to do?
Article: Tell don't ask - watering before refactor
public class Watering {
private final RaisedBedRepository raisedBedRepository;
private final WaterValveRepository waterValveRepository;
public Watering(RaisedBedRepository raisedBedRepository, WaterValveRepository waterValveRepository) {
this.raisedBedRepository = raisedBedRepository;
this.waterValveRepository = waterValveRepository;
}
public boolean perform(WateringCommand command) {
// cut out: getting raised bed with plants and wattering bed
boolean successfullyWatered = waterBed(bed, valve);
return successfullyWatered;
}
private boolean waterBed(RaisedBed raisedBed, WaterValve waterValve) {
List<Plant> plants = raisedBed.getPlants();
for (Plant plant : plants) {
Integer moisture = plant.getSoilMoisturePercentage();
PlantType type = plant.getType();
boolean needsWatering = false;
switch (type) {
case VEGETABLE:
needsWatering = moisture < 60;
break;
case FLOWER:
needsWatering = moisture < 50;
break;
case TREE:
needsWatering = moisture < 45;
break;
}
if (needsWatering) {
try {
waterValve.setOpen(true);
plant.setSoilMoisturePercentage(moisture + 20);
plant.setWateringCount(plant.getWateringCount() + 1);
Thread.sleep(100); // wait for some water to flow
} catch (InterruptedException e) {
return false;
} finally {
waterValve.setOpen(false);
}
}
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment