动态设计模式

时间:2011-10-11 03:45:26

标签: oop design-patterns

我有一个名为'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。我是设计模式的新手,请原谅我写标题的方式。

2 个答案:

答案 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

相同