1

私のアプローチが大丈夫かどうか、または改善できるかどうか疑問に思っています:

Public Class Company  
  private _id as Integer
  private _name as String
  private _location as String

  Public Function LoadMultipleByLocation(Byval searchStr as String) as List(Of Company)
     'sql etc here to build the list
  End Function
End Classs

このようなオブジェクト マッピングを持つことについての考えはありますか?

4

2 に答える 2

1

この場合、Company のインスタンスを作成し、それを使用して会社のリストを返しますか?

これを行う人もいますが、私は自分のデータ オブジェクトをダム データ コンテナーに分離することを好みます。

public class Company : EntityBase
{
     private int _id;
     private string _name;
     private string _location;
}

ダム エンティティを SQLParameters のコレクションに変換して戻し (永続化するため)、渡された SQLReader からインスタンス化するための一般的なメソッドを含む基本クラス (EntityBase) を使用します (これは各具象クラスでオーバーライドされ、プライベート変数へのリーダー)。

次に、実際にデータベース呼び出しを行い、適切なエンティティ オブジェクトを作成し、それを返す「サービス」クラスを使用することを好みます。ここでポリモーフィズムを利用して、コードの重複を大幅に減らすことができます。

于 2008-11-03T21:09:53.407 に答える
0

@ダン

EntityBase は、次のような各エンティティ オブジェクトが継承する基本クラスになります。

public class EntityBase
{
     public virtual string SaveSproc { get; }

     public virtual void LoadFromReader(SqlReader reader)
     {
     }

     public virtual void Save()
     {
         List<SqlParameters> paramList = = this.CreateParamsList();
         DoSqlStuff(this.SaveSproc, paramList);
     }

     public virtual List<SqlParamenter> CreateParamsList()
     { 
          return new List<SqlParameter>
     }
}

public Company : EntityBase
{

    private string _data;

public override string SaveSproc { get { return "SprocThatSaves"; } }

    public override List<SqlParameter> CreateParamList()
{   
    List<SqlParameter> param = new List<SqlParameter>
    param.Add(new SqlParameter("Data",_data);

    return param;   
}

public override void LoadFromReader(SqlReader reader)
{
    // PsuedoCode
    _data = reader["data"];
}
}

これで、DB 層は会社のデータを含むリーダーを取得し、次のようなことを行うことができます:

Company = new Company();
Company.LoadFromReader(reader);

データを保存するには、次のようにします。

Company.Save();
于 2008-11-03T22:06:35.227 に答える