2012-07-14 63 views

回答

2

类比全局结构小得多,所以实例变量的影响要小得多。通过保持小班制和密切遵守单一责任原则,避免了全球变量的许多不利因素。如果实例变量是通过传入参数创建的,那么我通常会在构造函数中使该参数成为明确的依赖关系。此外,实例变量被封装得很好,绝不会直接在实例的方法之外进行修改,从而很容易确定实例变量的修改位置。最后,实例变量必须对整个类有意义或者必须是私有的。

0

实例变量只能在特定的类中访问。因此为了防止实例变量被广泛使用,请保持较小的类。如果一个类变得很大,决定它的一部分是否可以重构为另一个更小的类,以及原始类使用的类。

0

既不是实例变量也不是全局变量,也不是任何种类的变量都有“问题”......它们都是工具。问题是有时候很多程序员选择使用“错误的工具”。你必须仔细考虑你的选择是什么意思,所以你可以做出正确的选择。

对某些东西使用全局变量,如CurrentUserName ...意味着您说他的CurrentUserName是普遍知道的东西。而且“每次只能有一个”CurrentUserName。如果你想允许用户同时登录(除非你真的很幸运,并且两个用户都有相同的名字),那么这可能是错误的...

实例错误使用实例变量如果您将用户的电子邮件地址作为实例变量,然后您意识到每个用户可以有多个电子邮件地址。

我也给出了一个继承的例子,因为我认为它会使它更加清晰: 与继承相关的问题是,例如,如果您建模典型的学生,教师问题,并且您尝试让学生Person和Teacher的子类Person的子类。然后你意识到有些人可能都是...

从Person继承的学生是一种静态关系,不能在运行时更改。而学生和教师不是静态的关系......一个人既不可能既然成为一名学生,然后开始成为一名教师,然后又不再是两个人,而是永远是同一个人,并且该模型不能处理...

回到用户,用户是“关联”与多个电子邮件帐户...如果你把一个实例变量,你说他只是“关联“一个电子邮件帐户,并且您与您的问题域相矛盾,这就是为什么您会遇到问题的原因......

如果您说全局已知的当前用户名同样适用。 ..

所有情况下的问题是t你有一个问题领域,并且你的模型是错误的......你必须让你的程序和你的模型的行为类似于问题领域....如果你不这样做,你会遇到问题,无论您选择哪种工具来解决您的问题。

顺便说一句:我也认为用户有一个电子邮件地址列表是错误的,但这是一个完全不同的动机。其实我使用

class ContactInformation 
{ 
    User contact; 
    EMailAddress email; 
} 

,记住,对象不“自己的”,也不是“有”其他对象......这是一个实现决策...对象只是“知道”其他物体...