アクティブなレコードパターンとそのいくつかの例を読んでから、独自のクラスを実装することをお勧めします。
これは、いくつかの基本的な概念を含む単純なクラスの大まかなスケッチです(以下)。
このアプローチに従うと、ニーズに合わせてパターンを拡張できます。DBからオブジェクトとしてレコードを取得し、その値を変更してから、レコードを更新しても問題ない場合があります(オプション2)。または、オーバーヘッドが大きすぎる場合は、データベース内のレコードを直接更新する静的メソッドを使用します(オプション1)。挿入の場合、データベース(SP /クエリ)は、必要に応じてテーブルの自然/一意キーを検証し、おそらく一意の制約エラーを示す特定の値/コードを返す必要があります)。更新の場合、自然キーフィールドの更新を許可する場合は、同じチェックを実行する必要があります。
これの多くは、アプリケーションが特定のテーブルに対してどの機能を許可するかによって異なります。
私は静的メソッドよりも、DBからオブジェクトを取得してから、値を変更して保存することを好む傾向があります。私にとっては、コードを呼び出すことで使いやすく、クラス内の難解なビジネスロジックを簡単に処理できます。
public class MyEntityClass
{
private int _isNew;
private int _isDirty;
private int _pkValue;
private string _colValue;
public MyEntityClass()
{
_isNew = true;
}
public int PKValue
{
get {return _pkValue;}
}
public string ColValue
{
get {return _colValue;}
set
{
if (value != _colValue)
{
_colValue = value;
_isDirty = true;
}
}
}
public void Load(int pkValue)
{
_pkValue = pkValue;
//TODO: query database and set member vars based on results (_colVal)
// if data found
_isNew = false;
_isDirty = false;
}
public void Save()
{
if (_isNew)
{
//TODO: insert record into DB
//TODO: return DB generated PK ID value from SP/query, and set to _pkValue
}
else if (_isDirty)
{
//TODO: update record in DB
}
}
}