それは二重の作業は、データアクセスコンポーネントとビジネス・コンポーネントを作成しますか?
-
26-09-2019 - |
質問
私は、データ、ビジネス、およびプレゼンテーション層で構成されて私の最初の階層のアプリケーションを設計しています。
私のビジネスコンポーネント(例えば、Business.Components.UserComponent)現在、以下の方法があります:
public void Create(User entity)
{
using (DataContext ctx = new DataContext())
{
ctx.Users.AddObject(entity);
ctx.SaveChanges();
}
}
私はこのデザインが好きです。しかし、私はオンラインいくつかの例に遭遇したことは、次の実装をお勧めします:
public void Create(User entity)
{
// Instanciate the User Data Access Component
UserDAC dac = new UserDAC();
dac.InsertUser(entity);
}
これは、それぞれの基本的な方法を(編集、削除...など、作成)を含む、すべてのエンティティのためのデータアクセスコンポーネントを作成することになる。
これは単にデータアクセスコンポーネントのメソッドを呼び出して、二重、私は基本的な方法でデータアクセスコンポーネントを作成しなければならないので、仕事だけでなく、ビジネス・コンポーネントのように思える。
何が正しく階層アプリケーションにおける基本的なCRUD機能を実装するためのベストプラクティスと考えられるでしょうか?彼らはビジネスコンポーネントにまたはで「コード化」であるはずのデータアクセスコンポーネント?
解決
これは依存しています。あなたはあなたの最初のアプローチに従うことができるよりも、あなたのビジネス層は、単にCRUD操作を行うことを期待していた場合。あなたは、ビジネス・コンポーネントは、多くの企業と協力し、いくつかの大きなビジネスロジックを使用する予定の場合は第二のアプローチは、より良いです。
の人々は第二のアプローチを使用したい理由は、テストし、永続性の無知されます。あなたが最初のアプローチを使用している場合は、ビジネス・コンポーネントは、しっかりとエンティティフレームワークと結合されています。テストは難しいですので、モッキングObjectContextには、非常に簡単な作業ではありません。あなたは第二のアプローチを使用している場合は、あなたのビジネス層は、永続性の層の上に独立しています。あなたは簡単にそれをテストすることができますし、必要であればあなたも、永続性の層を変更することができます。しかし、それらは、あなたはおそらく、現時点では探していない、より高度な概念です。あなたのコードをテスト可能であることをいくつかの追加の改善が必要になります。
DACはまた、リポジトリとして実装することができます。どのようにあなたが唯一のクラスを持っているし、リポジトリをインスタンス化するときに、エンティティタイプを定義するように、一般的なリポジトリを作成する方法はたくさんあります:
var repository = new GenericRepository<User>();
はまた、時々、複数のリポジトリ間で単一のコンテキストを共有することは合理的であるため、別個のデータアクセス層を使用して新たな複雑さを導入することに注意してください。これは、作業パターンの単位として知られている何かを一緒にしています。
インターネット上の作業パターンのリポジトリとユニットの実装に関する記事がたくさんあります。あなたは、私は後で私の答えにそれらを含めることができますので、興味があれば私はそれらのいくつかは、自宅でお気に入りとして保存されています。