2017-03-14 5 views
1

です。簡単な質問です。ビジネスロジックレイヤー(BLL)とデータアクセスレイヤー(DAL)を使用する階層型アーキテクチャー環境では、DALはBLLにどのようなタイプを渡すべきですか?DALとBLLのタイプは

現在、私たちのDALクラスは、DataTablesオブジェクトとSQlDataReaderオブジェクト(一般的なデータ型の中でも)を生成します。オブジェクトのカスタム型への変換は、BLLに渡す前にDALで行う必要がありますか?DALは元の型を渡す必要がありますか?BLLは変換を行いますか?

私は、DALレイヤーが将来別のテクノロジに置き換えられるかもしれないシナリオを考えようとしています。このシナリオでは、BLLが変換されたデータ型を期待してスイッチが作成されたときに、オブジェクトが返されていることを確認する必要があるように思えるでしょうか?

この資料や資料を明確にして、内容を明確にすることが役立ちます。

TIA

+0

それは意見の問題ですが、別のアセンブリ(*。モデルやちょうどあなたのモデル定義を含むもの)があれば、あなたのDALはデータを集めてモデルをBLLに返さなければならないと思います。明らかに、DALとBLLの両方が* .Modelsアセンブリを参照します – maccettura

答えて

1

ガイドラインがありますが、このための任意のハードのルール何もありません。また、アーキテクチャ、サイズ、要件、優先順位、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に渡す必要があります。

関連する問題