ОК, поэтому настоящий конфликт здесь на уровне моделирования данных.
- Сотрудник is-a менеджер (логический флаг)
- An Сотрудник имеет- менеджера (поле «Сотрудник»)
Существует два (возможно) разных понятия «менеджер» с одним и тем же именем. Итак, как нам справиться с этим (кажущимся) конфликтом на уровне модели?
- Мы могли бы его игнорировать.
- Мы могли бы просто переименовать одно или другое из понятий. Но это плохая идея, потому что эти два понятия, вероятно, тесно связаны 1 .
- Мы могли бы углубиться в понятия; то есть существует ли существенная (для модели) разница между «быть человеком со статусом менеджера» и «быть в роли менеджера для другого человека». Это может сказать нам, что понятия достаточно разные, что им нужно , чтобы иметь разные имена.
Итак, если предположить, что мы игнорируем это на уровне моделирования, как мы справимся с этим на уровне Java? Вот несколько советов:
Версия # 1 имеет два разных свойства с одинаковым именем. Вероятно, это нарушение соглашения JavaBeans ... по крайней мере, так как большинство людей понимают его.
public class Employee {
private boolean isManager;
private Employee manager;
public boolean isManager(){
return this.isManager;
}
public Employee getManager(){
return this.manager;
}
}
Версия # 2 изменяет имена свойств. Например, используйте «manager» и «aManager»:
public class Employee {
private boolean isManager;
private Employee manager;
public boolean isAManager(){
return this.isManager;
}
public Employee getManager(){
return this.manager;
}
}
Или вы можете настроить другое имя свойства.
1 - Например, в терминах UML Вы можете смоделировать атрибут «менеджер» как , полученный из Ассоциации, которая связывает сотрудника с его менеджером. Значение атрибута может быть получено путем проверки, является ли этот сотрудник менеджером любого другого сотрудника через ассоциацию.