我有一个名为'Employee'的班级。在类中有一个名为getAgentsByHierarchy的方法,它返回一个包含相应ID和其他信息的所有代理的数组。
Array{
[0] => Array{
[0] => code
[1] => id
[2] => name
[3] => role
}
}
我将此扩展到名为“Production”和“Payroll”的两个类。这两个类有fetchAll()方法,它们调用Employee.getAgentsByHierarchy()并获取所有代理和 ONE 额外数据/字段。
因此,当我调用Production.fetchAll()时,它应该返回:
Array{
[0] => Array{
[0] => code
[1] => id
[2] => name
[3] => role
[4] => production_figures_in_digits
}
}
当我调用Payroll.fetchAll()时,它应该返回:
Array{
[0] => Array{
[0] => code
[1] => id
[2] => name
[3] => role
[4] => payroll_figures_in_digits
}
}
我如何进行这种设计?
我的解决方案是在getAgentsByHierarchy()方法中包含一个参数,该参数检查被调用者是来自Production类还是来自Payroll类,以便它知道要返回什么数据。但是我认为这种方式不是OOP的做法,因为如果有一个新的类扩展Salesforce,我将不得不再次硬编码getAgentsByHierarchy()以满足新类的要求。
PS。我是设计模式的新手,请原谅我写标题的方式。
答案 0 :(得分:1)
在理想的面向对象的书面应用程序中,父类永远不应该关注它的Child类的行为。它继承的子类必须遵守父类的合同。
因此,Employee类不应该关注Production,Payroll或从Employee类继承的任何其他类的存在。
理想情况下,应在生产和工资单(或任何其他未来的子类)中重写getAgentsByHierarchy,以在数组中嵌入特定于它们的信息。
答案 1 :(得分:0)
如果Production
有信息,为了降低耦合,请按照这样做
Production.fetchAll() {
Employee.getAgentsByHierarchy();
Production.getFiguresInDigits();
// some method to combine them then return
}
与Payroll