SqlDataReaderコードはどのセクションに配置する必要がありますか?
-
05-07-2019 - |
質問
私はc#を初めて使い、n層のWebアプリケーションを作成しようとしています。ロジックとコードを適切な場所に配置するために、コードの配置場所について質問があります。
3つのメインセクションがあります:
-
DataAccessコード-" BusinessLogic"という名前のフォルダー内App_Codeフォルダー内。
-
ビジネスロジックコード-" DataAccess"という名前のフォルダー内App_Codeフォルダー内。
-
プレゼンテーション層-すべてのUI
たとえば、データベースからレコードを取得するためにSqlDataReaderを記述する必要がある場合、どこでコードを物理的に記述しますか? BLLまたはDALの場合
IEプレゼンテーションレイヤーからBLLコードを呼び出します。
ContentBLL content = new ContentBLL();
//some code to call the BLL layer...
これは私が混乱し始めるところです。呼び出しているビジネスレイヤーロジックレイヤーで、ここでSqlDataReaderコードを記述するか、もう1つのステップを作成して、データアクセスレベルでSQlDataReaderコードを記述します。
IE BLLに、DALを呼び出すメソッドを追加する必要がありますか? E.G
public static ContentBLL GetPageContent(intID)
{
return ContentDAL.GetItem(ID)
}
そして私のDALには実際のSqlDataReaderを実行するメソッドがあります E.G
public static ContentBLL GetItem(int id)
{
//return the SqlDataReader code...
}
asp.net Webサイトのチュートリアルから学ぼうとしていますが、チュートリアルのDALではデータセットを代わりに使用しています。 どんな助けも大歓迎です。
解決
私の典型的なアプローチは、冗談で2.5層メソッドと呼んでいるものです。
この方法では、次のアプローチを使用します。
Presentation Layer
Businesss Object Layer / Data Serialization
Database Service Layer
ビジネスレイヤーの各ビジネスオブジェクトには、IDataReaderを受け入れるコンストラクターがあります。次に、このリーダーが読み取られてオブジェクトに入力されます。
データベース層は、すべてのDBアクセス要求をまとめ、リーダーを返します。
これは一部の人が望むほど純粋ではありませんが、別の方法はダムコンテナクラスを作成して階層間でデータをマーシャリングすることであり、IDataReaderを使用することを好みます。
さらに、SqlDataReaderではなくIDataReaderを使用することで、私はまだDALと疎結合しており、SQLServerだけでなく、あらゆる形式の永続性を実装できます。
他のヒント
これは、オーバーエンジニアリングの古典的なケースのように聞こえます。
学習段階で少し過剰なエンジニアリングが必要であるという事実については議論しませんが、いずれかの時点でさらに混乱が生じた場合は、後退してアプローチを再検討する必要があると思います。
ASP.NETについてもう少し学習してみてください。セマンティクスについてあまり強調しないでください。心を開いてコードをリファクタリングできるようにすれば、おそらく自分で質問に答えることができるでしょう。