1) DAL は DataTables または DataSets のみを返すメソッドを実装する必要があります
絶対違う。DataTable と DataSet は過去の成果物です。DAL メソッドは、DAL エンティティを受け取る/返す必要があります。たとえば、Entity Framework を使用している場合、それらは EF が作成した自動生成クラスになります。または、EF Code First を使用している場合、それらは SQL テーブルにマップするために作成したクラスになります。
2) 異なるモデル\ビジネス オブジェクトを表すクラスを保持する必要がありますか?
1) で説明したように、DAL レイヤーには、SQL テーブルにマップされるエンティティと、リポジトリ インターフェイスの実装が含まれている必要があります。リポジトリ インターフェイスは、これらのエンティティでの操作を定義します。DAL レイヤー内で、Entity Framework 用にこのインターフェイスを実装します (これを使用する場合)。メソッド内では、DataContext を使用して、エンティティに対してさまざまな操作を実行します。
3) DAL の一部でもあるさまざまなリポジトリ クラスをどこに配置すればよいですか?
これらは、データ アクセス クラスと同じアセンブリに配置する必要があります。
その後、ASP.NET MVC アプリケーションは DAL レイヤーを使用します。コントローラーは単にリポジトリーインターフェースをコンストラクターパラメーターとして受け取り、アクション内でさまざまなメソッドを呼び出します。次に、選択した依存性注入フレームワークを構成して、このリポジトリ インターフェイスの特定の実装をコントローラーに注入します。この実装は、Entity Framework に固有のものになります。
ただし、何をするにしても、ASp.NET MVC アプリケーション自体の内部でビュー モデルを定義することを忘れないでください。これらは、Models フォルダー内に配置できます。ビュー モデルは、ビューに渡すクラスです。典型的なコントローラ アクションは、リポジトリを使用して 1 つ以上のドメイン エンティティをフェッチし、それらのエンティティを特定のビュー用に定義した単一のビュー モデルにマップし、最後にビュー モデルをビューに渡します。もちろん、これは逆に機能します。コントローラー アクションはビュー モデルをアクション パラメーターとしてビューから取得し、このビュー モデルを 1 つまたは複数のドメイン エンティティにマップし、それらのドメイン エンティティを渡すリポジトリから 1 つまたは複数のメソッドを呼び出します。