мне интересно, если есть менее болезненный способ, чтобы написать что-то вроде следующего:Объект дизайн кэширования шаблон
public class Company {
// CEO, Programmer, and Janitor all inherit from an Employee class.
private CEO _CacheCEO {get;} = CEOFactory.NewCEO();
private Programmer _CacheJavaProgrammer {get;} = ProgrammerFactory.NewJavaProgrammer();
private Programmer _CacheIOSProgrammer {get;} = ProgrammerFactory.NewIOSProgrammer();
private Janitor _CacheJanitor {get;} = JanitorFactory.NewJanitor();
// etc.
public IEnumerable<Employee> GetEmployeesPresentToday() {
List<Employee> r = new List<Employee>();
if (ExternalCondition1) { // value of the condition may differ on successive calls to this method
r.Add(this._CacheCEO);
};
if (ExternalCondition2) { // all conditions are external to the Company class, and it does not get notified of changes.
r.Add(this._CacheJavaProgrammer);
}
if (ExternalCondition3) {
r.Add(this._CacheIOSProgrammer);
}
if (ExternalCondition4) {
r.Add(this._CacheJanitor);
}
// etc.
return r;
}
Та часть, которая ошибок меня здесь есть все частные Ивар. Если у меня (скажем) 30 разных сотрудников, это становится трудоемким. Есть ли способ избежать наличия отдельного ivar для каждого сотрудника?
Мне вряд ли понадобится доступ к объектам сотрудника, кроме метода GetEmployeesPresentToday(). Другими словами, я не ожидаю, что какой-либо код будет спрашивать: «Кто твой генеральный директор?» или т.п.
Однако важно, чтобы при выполнении двух разных вызовов в GetEmployeesPresentToday() и Condition1 в указанном выше коде было истинно каждый раз, тогда в каждом списке должен появляться один и тот же главный объект.
Тип отображения объектов в словаре вместо переменной для каждого типа сотрудников? – Ralf
Может быть более одного сотрудника определенного типа; Я отредактировал вопрос, чтобы понять это. –
Если вы можете дать ему отдельный variablename для меня другой тип. Я не имел в виду тип здесь в контексте класса и т. Д. – Ralf