2017-02-12 12 views
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"); 

は、それはすべての新しいロギングユーザークラスフィールド loginpasswordと私のコードで上書きされることを意味していますか?はいのようです。しかしそれは良いですか?または、私はこのような問題がありますか:

たとえば、クラスのインスタンスのフィールドがDavidで初期化され、2番目のユーザーがログインし、フィールドが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 

と私は理解して、私がなぜ...

他の変形を理解することはできませんが構造として、ユーザーを作成し、すべてのユーザーのための構造の新しいコピーを作成することです。いいですか?それとももっと良い解決法がありますか?

+0

構造体またはクラスを使用すると違いはありません。ユーザークラスは1人のユーザーを表します。私は "getUserByName"は静的メソッド、独立した関数またはコンストラクタでなければならないと思いますので、 'new User( "David")'または 'new User( "Jow")'とすることができます。 – belka

+0

ロジックとモデルを互いに分離するためには、まったく別のソフトウェアパターンを選択するべきでしょう。あなたがvibe.dを使用していることを考慮して、MVCかその行に沿ったものを探してください。 – Bauss

答えて

1
writeln("login before: ", login); 

あなたはlogin名前付き引数を持っているのでloginは、クラスのloginフィールドを参照していないこと。クラスフィールドが必要な場合は、

writeln("login before: ", this.login); 
関連する問題