繁体   English   中英

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

[英]Should Users be class or arrays of structures?

我无法理解我是否以正确的方式编写代码。 我申请了签证。

main内部的代码:

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都会在我的代码中被覆盖? 好像是 但这好吗? 还是我有这样的问题:

例如,如果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不引用该类的login字段,因为您有一个名为login的参数。 如果要使用class字段,则需要:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM