私は最近、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は私が考えることができる最高のものです。
私は間違いなくLoadメソッドに傾いています。 2つ目のオプションは、DBの移動を最小限に抑えながら、各Getで重複したコードをたくさん必要とするという欠点があり、他のgetが呼び出されたかどうかを判断しようとする複雑さです。 –
各Getメソッドで必要な重複コードは、プライベートDBLoadedフラグを保持して初期化をチェックし、必要に応じてLoadメソッドを呼び出すことです。チェックをLoadメソッド内に埋め込むことで、その行を1行にまとめることができます。各Getの最初の行としてLoadPropertiesIfUninitialized()。ほとんどの場合無駄なコールですが、明快さは数ナノ秒のオーバーヘッドよりも優先されます。 – HABO