用户应该是类还是结构数组?

时间:2017-02-12 08:17:06

标签: d vibed

我无法理解我是否正在以正确的方式处理代码。我振动了应用程序。

主要代码:

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");

这是否意味着每个新的日志记录用户类字段loginpassword都会在我的代码中被覆盖?这看起来是肯定的。但这样好吗?或者我会有这样的问题:

例如,如果类实例中的字段将由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

我无法理解为什么......

我理解的另一个变体是将用户作为结构并为每个用户创建新的结构副本。好吗?或许还有另一个更好的解决方案?

1 个答案:

答案 0 :(得分:1)

writeln("login before: ", login);

login未引用该类的login字段,因为您有一个名为login的参数。如果你想要你需要的课程字段:

writeln("login before: ", this.login);