2009-04-20 10 views
0

私は最近、T/Fの一連の質問を受け、回答がデータベースに保存される評価部分を含むプロジェクトを継承しました。要件が変更されたので、後でこれらの回答を取得する必要があります。このプロジェクトの他の場所では、各GETのデータアクセスオブジェクト(DAO)を呼び出すクラスがあります.20-30の回答を得なければならないと、DBサーバーのトリップが多いので、不安定で低速です。 DBを1回呼び出すだけで、メモリ内のすべてのプロパティを埋める方が良いようです。コンストラクタまたはメソッドでDBから保存された設定を取得しますか?

public Assessment(int ParticipantId) 
{ 
    //Instantiate DAO and get values to fill props. 
} 

単独コンストラクタを残し、

のような関数を作成:私はそれがこの

public class Assessment 
{ 
    // Property Variables like private bool _needSearchAssistance; 
    // Accessor Methods - Typical Get{} Set{} 
    // Constructor 
    public Assessment() 
    { 
    } 
     public void SendResultsEmail(EmailAddress email) 
     { 
      // Typical SMTP stuff 
     } 
     public void Save(int ParticipantId) 
     { 
      //Instantiate DAO and save to DB 
     } 
} 

ようなクラスのようなオーバーロードされたコンストラクタを使用する方が理にかなっていていると仮定すると、

public void LoadFromDb(int ParticipantId) 
{ 
    /Instantiate DAO and get values to fill props. 
} 

関数アプローチを使用する場合は、標準または標準の命名規則'のようなものです。これまでのところ、LoadFromDbは私が考えることができる最高のものです。

答えて

1

私は、データを取得するメソッドを使用する傾向がありました。 LoadPreviousResponses。テストを簡素化し、機能を分離します。共有したくない場合は非公開にしてください。オーバーロードされたコンストラクタは、メソッドが適切であればそれを呼び出すことができます。 ParticipantIdが提供されたとき。

もう1つの方法は、空のインスタンスを作成し、DBアクセスが必要なすべてのプロパティで最初のGet呼び出しが実行されるまで、適切なすべてのデータをロードすることです。この時点で、データベースへの1回のラウンドトリップですべてのデータを取得し、残りのインスタンスにデータを取り込むことができます。誰も詳細を尋ねない場合は、コストを節約しました。

+0

私は間違いなくLoadメソッドに傾いています。 2つ目のオプションは、DBの移動を最小限に抑えながら、各Getで重複したコードをたくさん必要とするという欠点があり、他のgetが呼び出されたかどうかを判断しようとする複雑さです。 –

+0

各Getメソッドで必要な重複コードは、プライベートDBLoadedフラグを保持して初期化をチェックし、必要に応じてLoadメソッドを呼び出すことです。チェックをLoadメソッド内に埋め込むことで、その行を1行にまとめることができます。各Getの最初の行としてLoadPropertiesIfUninitialized()。ほとんどの場合無駄なコールですが、明快さは数ナノ秒のオーバーヘッドよりも優先されます。 – HABO

-1

データベースへの接続を持つデータベースオブジェクトを使用して、このクラスに渡して接続を使用することはできませんか?開いていない場合は、必要に応じて開くことができます。

このクラスを他のデータベースにも必要とする場合は、IDatabaseインターフェイスを実装することができるので、これによりさらに多くのオプションが提供されます。

+0

私はたくさんのコードを削除しました。このオブジェクトはデータ認識であり、実際には接続を処理するBaseDAOオブジェクトを拡張しています。私が取り組もうとしているのは、データがどこかに保持されている場合、コンストラクタを埋めるのが理にかなっているのか、オブジェクトを埋めるメソッドを持つのが良いのでしょうか? –

+0

あなたは質問に答えていません。あなたは、議論の一部ではないDAOで使用されるインターフェイスです。 –

関連する問題