免责声明:
在我的答复中,我将重点讨论样式问题,而从安全的角度来看,ID,登录名和普通密码是可以使用的一组好参数。您应该可以将我的答案推论到用来确定用户特权的任何基本数据集...
我也认为user.isAdmin()
等同于IsAdmin(User user)
。这是您的选择。
回复:
我的建议是仅向任一用户:
public bool IsAdmin(User user);
或同时使用以下两者:
public bool IsAdmin(User user); // calls the private method below
private bool IsAdmin(int id, string name, string password);
公开方法的原因:
在编写公共方法时,通常最好考虑一下如何使用它们。
对于这种特殊情况,通常要调用此方法的原因是要弄清楚某个用户是否是管理员。这是您需要的方法。您确实不希望每个调用者都必须选择正确的参数来发送(并且由于代码重复而冒错误的风险)。
采用私有方法的原因:
有时,仅接收最少一组必需参数的私有方法可能是一件好事。有时没有那么多。
拆分这些方法的好处之一是,您可以从同一类中的多个公共方法中调用私有版本。例如,如果您希望(由于某种原因)对Localuser
和的逻辑略有不同RemoteUser
(也许有一个设置可以打开/关闭远程管理员?):
public bool IsAdmin(Localuser user); // Just call private method
public bool IsAdmin(RemoteUser user); // Check if setting is on, then call private method
private bool IsAdmin(int id, string name, string password);
此外,如果出于任何原因需要将私有方法公开...则可以。就像更改private
为一样简单public
。在这种情况下,优势似乎并不大,但有时确实如此。
另外,在进行单元测试时,您将可以进行更多的原子测试。通常不必创建完整的用户对象即可对此方法运行测试,这非常好。而且,如果您想全面覆盖,则可以测试两个呼叫。