ガイドラインがありますが、このための任意のハードのルール何もありません。また、アーキテクチャ、サイズ、要件、優先順位、ORMの使用などに基づいて、プロジェクトごとにガイドラインが変更されることがあります。thisを参照してください。
私が言ったように、何も決定的なものはありません。私の大きなプロジェクトでは次のことがあります。
私はNHibernate ORMを使用しています。私のDALはエンティティを返します。私のBLLはエンティティを受け取り、それをDTOに変換します。 DTOはアプリケーション層に渡されます。これはすべての場合に当てはまりません。投稿thisを参照してください。私はその答えでなぜそうするのか詳細を述べました。
私の小規模なプロジェクトでは、Dapper ORMを使用します。この場合、私のDALはエンティティを返します。 BLLはEntityを受け取り、アプリケーションにそのまま渡します。 Dapperはプロキシを作成しないので、エンティティをDTOに変換しません。
あなたはORMを使用していないようです。第2の方法(エンティティをBLLに転送してアプリケーションにも同じ)は、あなたにとってより良いアプローチかもしれません。しかし、あなたはまた、私が上記の他の側面を考慮する必要があります。
上記のいずれの場合も、DALはADO.NETオブジェクトではなく、変換されたオブジェクト(Entity/POCOなど)を返す必要があります。この方法では、将来のテクノロジースイッチは、インターフェイスが壊れていない限り、DALでのみ変更する必要があります。
ADO.NETオブジェクト(DataTable、DataReader)を転送すると、DALとプロジェクト全体が1つのテクノロジにバインドされます。技術を切り替えるのは難しいでしょう。一方、DALがEntity(plain c#class)を返す場合は、DALのテクノロジを切り替えることができ、アプリケーションには影響しません。 BLLで何をするかは、他の考慮事項に基づいて決まります。
オブジェクトのカスタムタイプへの変換は、BLLに渡す前にDALで行う必要がありますか?またはDALが元のタイプを渡してBLLが変換を行うべきですか?
DALでオブジェクトを変換する必要があります。変換されたオブジェクトをBLLに渡す必要があります。
それは意見の問題ですが、別のアセンブリ(*。モデルやちょうどあなたのモデル定義を含むもの)があれば、あなたのDALはデータを集めてモデルをBLLに返さなければならないと思います。明らかに、DALとBLLの両方が* .Modelsアセンブリを参照します – maccettura