【问题标题】:Should Users be class or arrays of structures?用户应该是类还是结构数组?
【发布时间】:2017-02-12 18:37:12
【问题描述】:

我不明白我是否以正确的方式编写代码。我有振动应用程序。

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

例如,如果类实例中的字段将由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")' or 'new User("Jow")'。
  • 您或许应该选择一种完全不同的软件模式来将逻辑和模型彼此分开。考虑到您正在使用 vibe.d,请选择 MVC 或类似的任何东西。

标签: d vibed


【解决方案1】:
writeln("login before: ", login);

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

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

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多