3

データアクセス層の設計に.Netエンタープライズライブラリデータアクセスアプリケーションブロックを使用しています。

私のCategoryDALクラスには、次のようなメソッドがあります。

GetProductsInCategory(int CatId)、GetAllProducts、GetCategoriesなど。

私の質問は、このコード行をどこに置くかです。

DatabaseFactory.CreateDatabase("MyDB");

上記のすべてのメソッドに配置するか、データベースオブジェクトをDALクラスに返す基本クラスを用意しますか。

また、これらのDALクラスメソッドを静的に保持する必要がありますか?

4

3 に答える 3

3

データベースの例では、接続などの共通オブジェクトを返す基本クラスを好みます。

データ アクセス レイヤーの設計への参照は次のとおりです。 .NET アプリケーション アーキテクチャ: データ アクセス レイヤー

Microsoft Enterprise Library Data Access Application Block を使用しています。ここに記載されているほとんどのことを行います。ただし、接続やトランザクションなどの一般的なものは基本クラスに送られます。

代替テキスト

DataServiceBase クラスは、データベース接続のオープン、トランザクションの管理、ストアド プロシージャ パラメータの設定、コマンドの実行などの一般的なデータ アクセス機能を提供します。つまり、DataServiceBase クラスには一般的なデータベース コードが含まれており、個々のデータ サービス クラスで使用する一連のヘルパー メソッドが提供されます。派生データ サービス クラスは、特定のコマンドの実行や特定のクエリの実行など、特定の目的のために DataServiceBase のヘルパー メソッドを使用します。

于 2009-03-04T21:54:54.680 に答える
1

あなたのヒントをありがとう..私はすべての私のDALクラスを基本クラスDBManagerから派生させます.このクラスにはコードを持つGetDatabase()と呼ばれる保護されたメソッドがあります: そして、派生クラスの私のメソッドは次のようになります:.

public DataSet GetProductsInCategory(int Category) 
{
Database db = base.GetDatabase(); 
DbCommand dbCommand = db.GetStoredProcComman("GetProductsByCategory"); 
db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, Category); 
return db.ExecuteDataSet(dbCommand);
} 

この DAL のデザインは大丈夫ですか?

于 2009-03-05T02:39:48.207 に答える
0

DAL とオブジェクト生成に SubSonic を使用することを検討することをお勧めします。Microsoft の Application Block を実装していますが、次のような単純な (そして堅牢な) クエリ機能を提供します。

SubSonic.Query qry = new SubSonic.Query(Usr.Schema);
qry.SetSelectList(Usr.Columns.UserPkid);
qry.QueryType = SubSonic.QueryType.Select;
qry.AddWhere(Usr.UsernameColumn.ColumnName, SubSonic.Comparison.Equals, Username);

using (IDataReader reader = qry.ExecuteReader())
{
    while (reader.Read())
    {
        Trace.WriteLine("Fetched User Pkid [" + reader[Usr.Columns.UserPkid].ToString() + "]");
    }
}

もちろん、 ActiveRecordパターンを実装しているため、オブジェクト クラスには .Delete()、.Add()、.Get() 型のメソッドがあります。

于 2009-03-05T04:30:33.137 に答える