【发布时间】:2017-06-01 14:53:04
【问题描述】:
我想为图书馆制作一个简单的软件。我刚刚开始掌握 C# 中 OOP 的概念,我的一位教授告诉我,在代码中包含存储库类是一种很好的做法,这样客户端代码就不会直接与处理数据的类交互根据。所以我试图让登录/注册表单在 Windows 窗体中工作,但我遇到了一些问题。
public User GetByUsernameAndPassword(string username, string password)
{
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate))
{
using (StreamReader sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
{
User item = new User();
item.FirstName = sr.ReadLine();
item.LastName = sr.ReadLine();
item.Username = sr.ReadLine();
item.Password = sr.ReadLine();
if (item.Username == username && item.Password == password)
{
return item;
}
}
return null;
}
}
}
我的意思是,我想看看当我注册一个新用户时,是否已经有另一个用户具有相同的用户名,如果有,我希望出现一个消息框,说明相同的用户名不能被使用两次。我怎样才能做到这一点?如果返回的结果为 null,如何让消息框出现,并在结果返回 User 类的对象时登录用户?
非常感谢。
【问题讨论】:
-
提示,你可以去掉 using 语句之间的
{。它们将共享相同的{ ... },并且您会稍微减少嵌套。 -
查看实际调用
GetByUsernameAndPassword的(您的表单的)代码也会有所帮助。在这两个部分之间建立联系将有助于解决问题。 -
您的方法在失败时返回
null,但至少有两个失败场景,它不会让调用代码知道发生了哪个。我认为让这种方法不那么具体很有用:与其查找具有给定用户名 和 密码的用户,不如创建一个仅查找具有给定用户名的用户的方法。这使得它在多种场景中都很有用:注册码可以使用它来确定用户名是否已被使用,登录码可以使用它来确定用户是否存在,如果存在,则他们的密码是否匹配。