динамический дизайн шаблона - PullRequest
0 голосов
/ 11 октября 2011

У меня есть класс с именем «Сотрудник».Внутри класса есть метод с именем getAgentsByHierarchy, который возвращает массив всех агентов с их соответствующим ID и некоторой другой информацией.

Array{              
  [0] => Array{
     [0] => code
     [1] => id  
     [2] => name    
     [3] => role
  }
}

Я расширяю это до двух классов с именами «Производство» и «Заработная плата»,Эти два класса имеют методы 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, чтобы он знал, какие данные возвращать.Но тогда я думаю, что это не ООП, потому что если есть новый класс, расширяющий Salesforce, мне придется снова жестко закодировать getAgentsByHierarchy (), чтобы удовлетворить требования нового класса.

PS.Я новичок в разработке шаблонов, пожалуйста, прости меня за то, как я написал название.

Ответы [ 2 ]

1 голос
/ 11 октября 2011

В идеальном объектно-ориентированном письменном приложении родительский класс никогда не должен беспокоиться о поведении своих дочерних классов. Его дочерний класс, который наследует, должен соблюдать контракты родительского класса.

Таким образом, класс Employee не должен беспокоиться о существовании Production, Payroll или любого другого класса, унаследованного от класса Employee.

В идеале getAgentsByHierarchy должен быть переопределен в Production и Payroll (или любом другом будущем дочернем классе) для встраивания информации, специфичной для них, в массив.

0 голосов
/ 11 октября 2011

Если у Production есть информация, чтобы уменьшить связь, сделайте это так

Production.fetchAll() {
    Employee.getAgentsByHierarchy();
    Production.getFiguresInDigits();
    // some method to combine them then return
}

И то же самое с Payroll

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...