public 属性不良的真实示例
A real life example of public properties being bad
我无数次读到 public class 上的属性是一个主要的失礼,但我不明白为什么没有得到转换的数据 in/out.
我要写的东西的例子
public class Employee
{
public String firstName;
public String lastName;
private int ssn = 0;
public boolean setSsn(String s)
{
//makes perfect sense why something like an ssn would use a getter setter
//some code to validate ssn
if(!validSsn(s)){
ssn = 0;
return false;
}
ssn = raw;
return true;
}
public String getSsn()
{
return ssn;
}
private boolean validSsn(String s)
{
//validation goes here
retrun val;
}
//I don't understand why I should make firstName private
// and then write
public void setFirstName(String s)
{
firstName = s;
}
public String getFirstName(String s)
{
return firstName;
}
}
请提供一个会导致问题的场景,请具体说明,而不是 "because it causes issues when other people use your code" 为什么?为什么会引起问题。在此先感谢建设性的批评和详细的回答:D
假设您的代码已投入生产。我编写了一个前端,使用您的员工 class 直接访问 firstName
和 lastName
。
6 个月过去了,现在有一个新的业务要求,您需要向名称字段添加验证。
你要添加到哪里?您将不得不将这些字段设为私有并添加设置方法,这将迫使我和其他使用您的代码的人重新编写我们的应用程序。
如果您一开始就正确封装了该数据,我们所要做的就是使用新版本的库和您的代码重新编译。
我无数次读到 public class 上的属性是一个主要的失礼,但我不明白为什么没有得到转换的数据 in/out.
我要写的东西的例子
public class Employee
{
public String firstName;
public String lastName;
private int ssn = 0;
public boolean setSsn(String s)
{
//makes perfect sense why something like an ssn would use a getter setter
//some code to validate ssn
if(!validSsn(s)){
ssn = 0;
return false;
}
ssn = raw;
return true;
}
public String getSsn()
{
return ssn;
}
private boolean validSsn(String s)
{
//validation goes here
retrun val;
}
//I don't understand why I should make firstName private
// and then write
public void setFirstName(String s)
{
firstName = s;
}
public String getFirstName(String s)
{
return firstName;
}
}
请提供一个会导致问题的场景,请具体说明,而不是 "because it causes issues when other people use your code" 为什么?为什么会引起问题。在此先感谢建设性的批评和详细的回答:D
假设您的代码已投入生产。我编写了一个前端,使用您的员工 class 直接访问 firstName
和 lastName
。
6 个月过去了,现在有一个新的业务要求,您需要向名称字段添加验证。
你要添加到哪里?您将不得不将这些字段设为私有并添加设置方法,这将迫使我和其他使用您的代码的人重新编写我们的应用程序。
如果您一开始就正确封装了该数据,我们所要做的就是使用新版本的库和您的代码重新编译。