そのため、TDDを介してデータアクセスレイヤーを作成してきましたが、やや懸念がありました。私はむしろ間違った道を進んで行きたくないので、私の考えがきれいなアーキテクチャに沿っているかどうかを確認するように皆さんにお願いしたいと思いました。
私のデータアクセスレイヤー(略してDAL)内のメソッドは非常に単純です。これらはデータベース内のストアドプロシージャと一致しており(これを呼び出して物事をきれいにする方法はありません)、プロシージャと同じパラメータが含まれています。次に、データベースに接続し、クエリ結果を返します。次に例を示します。
public int DeleteRecord(int recordId)
{
recordId.RequireThat("recordId").NotZeroOrLess();
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId});
return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray());
}
私は結果セットで何も意味のあることをしていないので、これはこのタイプのメソッドには完全に機能します。コマンドが機能したことを確認したいだけなので、非クエリの結果、つまり影響を受けた行だけを返し、その番号を使用してロジックを検証できます。
ただし、別のDALメソッドで、レコードをロードしたいとします。マイロード手順が実行されようとしているselects
テーブルの束と戻っに対してDataSet
、私はビジネスを作成する必要があり、私のDALは使用方法内のオブジェクトかどうかと戦っていますDataSet
、または私のビジネスオブジェクトの場合自身がちょうど持っている必要がありますLoad()
取得するメソッドをDataSet
DALから、そして基本的にそれ自身を埋めます。
DALを介してそれを行うと、Business Objectsのロジックが少なくなります(これは単なる選択ロジックですが、それでもロジックです)が、DALを少し混雑させて、本当にすべきでないことをしているように感じさせますやってる
皆さんはどう思いますか?