0
我无法理解我是否以正确的方式执行代码。我振动了应用程序。用户应该是类还是数组结构?
代码里面主要:
User user = new User(database);
user.getUserByName("admin");
用户类别:
class User
{
string login;
string password;
//....
void getUserByName(string login)
{
// sql request here
this.login = row[1].coerce!string;
this.password = row[2].coerce!string;
}
//...
}
多久的类的实例会住吗? 例如3位用户访问我的站点:David,Jow,Mike,所以getUserByName
将被调用3次。
user.getUserByName("David");
user.getUserByName("Jow");
user.getUserByName("Mike");
这是否意味着每一个新记录的用户类字段login
和password
会在我的代码被覆盖?这似乎是。但这很好吗?或者我会有这样的问题:
例如,如果类的实例中的字段将被David
初始化,然后第二个用户将登录和字段将被更改Jow
?
我决定检查我的想法。并做:
void getUserByName(string login)
{
writeln("login before: ", login);
Prepared prepared = prepare(database.connection, `SELECT id, login, password, usergroup from users WHERE login=?`);
Thread.sleep(1.seconds); // pause till new getUserByName with another name will be called (as I think)
prepared.setArgs(login);
ResultRange result = prepared.query();
...
}
和main
:
user.getUserByName("David");
user.getUserByName("Jow"); // calling another
但很奇怪的是,我得到:
login before: David
login after: David
login before: Jow
login after: Jow
但我预计,调用(第二)后: user.getUserByName("Jow");
在sleep
之后我会得到类似于:
login before: David
login after: Jow
而且我不明白为什么...
另一个变种我的理解是使用户的结构,为每个用户创建结构的新副本。好吗?或者,也许有更好的解决方案?
如果你使用一个结构或类,将没有区别。你的用户类表示一个用户。我认为“getUserByName”应该是一个静态方法,一个独立的函数或构造函数,所以你可以这样做:'new User(“David”)'或'new User(“Jow”)'。 – belka
您应该选择完全不同的软件模式来将逻辑和模型彼此分开。考虑到您使用的是vibe.d,请参阅MVC或其他相关内容。 – Bauss