我有一个Employee
类。它需要一个布尔标志来告知此员工是否是经理。
来自此问题For a boolean field, what is the naming convention for its getter/setter?我知道命名转换是将变量命名为X
,将获取方法命名为isX
。所以我的Employee
类将是这样的
class Employee {
boolean manager;
boolean isManager(){
return this.manager;
}
}
但是manager
这个名字让我感到困惑。单词manager
是名词,而不是形容词,例如active
中的current
,open
,the above question。 manager
可以是布尔标志或管理器对象。此外,如果我确实想要Employee
类中管理器的成员变量,则该标志已采用manager
变量名。
class Employee {
boolean manager;
boolean isManager(){
return this.manager;
}
//Employee manager; //don't know how to name this
}
在这种情况下,还有另一种命名布尔值管理器标志的方法吗?谢谢
一种选择是使用二值枚举代替布尔值:
class Employee {
enum Type { REGULAR, MANAGER }
Type type = Type.REGULAR;
Employee manager;
Type getType() {
return type;
}
Employee getManager() {
return manager;
}
}
在枚举名称和get方法名称中都可以使用Role
或Level
代替Type。
确定,所以真正的冲突在于数据建模级别。
有两个(可能)具有相同名称的不同“管理器”概念。那么我们如何在模型级别处理这个(明显的)冲突?
因此,假设我们在建模级别忽略它,我们如何在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术语,您可以将关联员工与经理的协会的“经理”属性建模为derived。可以通过测试该雇员是否是任何其他雇员的经理,通过关联来得出属性值。
这样的事情怎么样?
class Employee {
Employee manager;
boolean isManager(){
return (manager != null && manager instanceof Manager);
}
}