Users 应该是 class 还是结构数组?
Should Users be class or arrays of structures?
我不明白我是否以正确的方式编写代码。我有 vibed 应用程序。
main 中的代码:
User user = new User(database);
user.getUserByName("admin");
用户Class:
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;
}
//...
}
class 的实例会存在多久?
例如,有 3 个用户访问我的站点:David、Jow、Mike,因此 getUserByName
将被调用 3 次。
user.getUserByName("David");
user.getUserByName("Jow");
user.getUserByName("Mike");
这是否意味着每个新的日志记录用户 class 字段 login
和 password
都会在我的代码中被覆盖?好像是的但它好吗?或者我会遇到这样的问题吗:
例如,如果 class 实例中的字段将由 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
我不明白为什么...
据我了解,另一种变体是将用户作为结构并为每个用户创建新的结构副本。好吗?或者也许还有其他更好的解决方案?
writeln("login before: ", login);
login
不引用 class 的 login
字段,因为您有一个名为 login
的参数。如果您想要 class 字段,您需要:
writeln("login before: ", this.login);
我不明白我是否以正确的方式编写代码。我有 vibed 应用程序。
main 中的代码:
User user = new User(database);
user.getUserByName("admin");
用户Class:
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;
}
//...
}
class 的实例会存在多久?
例如,有 3 个用户访问我的站点:David、Jow、Mike,因此 getUserByName
将被调用 3 次。
user.getUserByName("David");
user.getUserByName("Jow");
user.getUserByName("Mike");
这是否意味着每个新的日志记录用户 class 字段 login
和 password
都会在我的代码中被覆盖?好像是的但它好吗?或者我会遇到这样的问题吗:
例如,如果 class 实例中的字段将由 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
我不明白为什么...
据我了解,另一种变体是将用户作为结构并为每个用户创建新的结构副本。好吗?或者也许还有其他更好的解决方案?
writeln("login before: ", login);
login
不引用 class 的 login
字段,因为您有一个名为 login
的参数。如果您想要 class 字段,您需要:
writeln("login before: ", this.login);