在确定ClassA是否可以“导航”到ClassB时,您是否仅考虑ClassA的字段/属性,或者还考虑ClassA的任何方法是否实际上“导航”到ClassB的任何对象?还是您是否考虑ClassA的某些方法是否只是临时持有对ClassB的任何对象的引用?
换句话说:假设我有一个ClassA,它没有任何类型为ClassB的字段。但是,我有一个方法ClassA.method1(ClassB b)。调用该方法时,它将通过调用b.method2()从b中提取信息,然后进行相应的操作,然后超出范围,但对b的引用不会永久存储在ClassA中。我是否表明ClassA可以导航到ClassB?
更简单地说,假设ClassA.method1(ClassB b)仅将b传递给其他对象,而从不调用b上的任何方法。我是否仅因为ClassA暂时拥有对ClassB的引用而指示ClassA 可以导航到ClassB?
或者,如果并且仅当ClassA的字段类型为ClassB时,我是否表明ClassA可以导航到ClassB?
答案 0 :(得分:1)
可导航性曾经是指某个特定的类拥有一个属性,该类可以通过该属性访问该属性的类型。句号它与操作或实现方法无关。
现在,可导航性几乎没有意义,并且显式的“球形”表示法告诉您,一个类而不是一个关联拥有一个属性。进行更改的原因是,当协会拥有财产时,没有什么可以阻止类进行导航。 (例如,考虑在代表关联的关系表中查询RDBMS。)我一点都不喜欢球符号,但实际上就是这样。
答案 1 :(得分:0)
可导航性是您真正不需要的。这仅表示“将有一些属性访问另一个类,但在当前设计阶段,我不知道如何调用它”。但是,那些隐式属性最明显。根据我的经验,只有极少数情况下,您实际上应该使用导航来清除某些方面。在大多数情况下,我只使用普通的无向关联。在稍后的设计阶段,我添加一个角色名称,并使用点号将其设置为拥有的属性。
对于一个操作使用另一个类作为参数或结果,而您没有显式属性的情况,您只需使用一个依赖关系即可。