我有一个课程如下:
public UIManager{
private UIInstructor uiInstructor;
private MOdel model;
}
UIManager将他的一些任务委托给UIInstructor。
我的问题是:如果UIInstructor想要使用UIManager的一些实例变量(例如:Model对象),是不是 有“UIInstructor”商店参考UIManager的好设计实践?
或者我们是否需要设计这样的设计,以便“UIInstructor”不应该“依赖”UIManager的任何操作?
答案 0 :(得分:0)
在UIInstructor中添加一个UImanager的引用将创建一个循环依赖,这是不好的。
理想情况下,构成新类的字段不应取决于这个新类。
因此,设计使得“UIInstructor”不应该“依赖”UIManager的任何操作。
答案 1 :(得分:0)
在这种情况下,尝试的第一个解决方案是让UIManager
对象将对model
的引用传递给uiInstructor
。一般来说,最好避免使用不需要的依赖项,特别是循环依赖项。
本着减少依赖关系的精神,您可能需要考虑uiInstructor
是否应该真正看到model
的所有。因此,您可能拥有以下Model
课程:
class Model
{
private InstructorModel instructorModel;
private StudentModel studentModel;
}
你可以想象我们可能会添加给你的经理,所以它也显示了一个学生
class UIManager{
private UIInstructor uiInstructor;
private UIStudent uiStudent;
private Model model;
}
然后UIManager
通过model.instructorModel
来初始化uiInstructor
,通常是通过构造函数。并通过model.studentModel
初始化uiStudent
。
这些只是一些想法。有许多不同的做事方式,但一个好的经验法则是安排每个班级只“看到”它需要的东西。