In OptaPlanner Nurse Rostering example, there are SkillProficiency class:
public class SkillProficiency extends AbstractPersistable {
private Employee employee;
private Skill skill;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public Skill getSkill() {
return skill;
}
public void setSkill(Skill skill) {
this.skill = skill;
}
@Override
public String toString() {
return employee + "-" + skill;
}
}
Here is the Employee class:
public class Employee extends AbstractPersistable {
private String code;
private String name;
private Contract contract;
private Map<ShiftDate, DayOffRequest> dayOffRequestMap;
private Map<ShiftDate, DayOnRequest> dayOnRequestMap;
private Map<Shift, ShiftOffRequest> shiftOffRequestMap;
private Map<Shift, ShiftOnRequest> shiftOnRequestMap;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Contract getContract() {
return contract;
}
public void setContract(Contract contract) {
this.contract = contract;
}
public int getWeekendLength() {
return getContract().getWeekendLength();
}
public Map<ShiftDate, DayOffRequest> getDayOffRequestMap() {
return dayOffRequestMap;
}
public void setDayOffRequestMap(Map<ShiftDate, DayOffRequest> dayOffRequestMap) {
this.dayOffRequestMap = dayOffRequestMap;
}
public Map<ShiftDate, DayOnRequest> getDayOnRequestMap() {
return dayOnRequestMap;
}
public void setDayOnRequestMap(Map<ShiftDate, DayOnRequest> dayOnRequestMap) {
this.dayOnRequestMap = dayOnRequestMap;
}
public Map<Shift, ShiftOffRequest> getShiftOffRequestMap() {
return shiftOffRequestMap;
}
public void setShiftOffRequestMap(Map<Shift, ShiftOffRequest> shiftOffRequestMap) {
this.shiftOffRequestMap = shiftOffRequestMap;
}
public Map<Shift, ShiftOnRequest> getShiftOnRequestMap() {
return shiftOnRequestMap;
}
public void setShiftOnRequestMap(Map<Shift, ShiftOnRequest> shiftOnRequestMap) {
this.shiftOnRequestMap = shiftOnRequestMap;
}
public String getLabel() {
return "Employee " + name;
}
@Override
public String toString() {
return code + "(" + name + ")";
}
}
And also the Skill class:
public class Skill extends AbstractPersistable {
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return code;
}
}
I wonder why it choose to use a SkillProficiency class rather than Embedded the skill variable inside the Employee class? Would it be more simple if we embedded it? There must a good reason behind this decision, but I just can't figure it out. If anybody know, please share it with me. And also, it is okay if I embedded the skill variable inside the Employee class? What will be the bad effect of doing it? Thanks and regards.