2017-06-12 1 views
2

現在、Active DirectoryとSQL Server 2008を使用しているイントラネットWebサイトで作業しています。ASP.NETのMVCデザインパターンを使用して、データアクセスに関するプロジェクトの適切なアーキテクチャを取得する方法を理解しようとしています。一部はエンティティフレームワークを使用しています。私は間違った方向に行かないために数日間苦労してきました。私は私の会社の唯一の開発者だということを知っています。これは私の最初の経験であり、最近のフレームワークについては誰も知りません。私はアーキテクチャとそれを正しく行う方法について読んだことがありますが、すべてを正しく把握しているかどうかはわかりません(How do architect an ASP.Net MVC app with EF?)。ASP.NET MVCとEntity Frameworkでアーキテクチャ設計を理解しましたか?

Controller(MVC Project) ---uses---> Service Layer (Project) ---uses--> EFDal (Project) 
      ^      |  ^      | 
       |       |  |       | 
       |<-------<-----returns ViewModel |<---------<------returns Query Result 

EFDalがEntityFrameworkデータアクセス層である:ここで

は、私は(私の描画スキルはご容赦)、やって、独自のプロジェクトを持つそれぞれの層を考えていたものです。

私が理解したところでは、サービスレイヤにはDALを呼び出すメソッドが含まれており、DALはデータにアクセスするために使用されます。

私のアプローチに間違いがありますか?
私はサービスレイヤーと言っていますが、すべての操作を含んでいますか? (例:DB内のユーザーの検索 - >サービスレイヤーが値を返すEFDalを呼び出すことで、検索を起動し、順番にサービス層をコントローラーにViewModelにを返す) (参照:Creating a Service Layer for my MVC application?

最後に、私のサービス万一レイヤークラスは永続化の目的でインタフェースを実装しますか?

私たちは私たちのプロジェクトにMVCパターンを使用していました。小規模なプロジェクトに取り組んでいたため、新しいプロジェクトでソリューションを拡張する必要はありませんでした。ここで私はアーキテクチャが悲惨な保守性に終わると誤解しているように感じます。ご協力いただきありがとうございます!

+0

アプリケーションのサイズによっては、さまざまなアーキテクチャが考えられます。より小さなアプリケーションの場合は、EFを参照する単一のMVCプロジェクトで手に入るかもしれません。私たちのPOCOモデルのApp.EntitiesとUIのApp.MVCを作成し、Automapperを使用してViewModelsを作成する場合、私たちのほとんどは中規模です。 [CQRS](https://msdn.microsoft.com/en-us/magazine/mt147237.aspx)は別のオプションです。 –

+0

@SteveGreeneあなたの答えをありがとう。それは私がやっていることのようなものです。 Automapperを使用したことはありません。私が必要としていることはわかりません。私のDBテーブルはすべてシンプルで、たくさんあります。少なくともAutomapperは複雑なオブジェクトに使用されていると私が理解したことからですか?私は実際にアプリケーションの大きさを言うことはできませんが、同社には4.5k人の従業員(そしてこの種のものをやっているインターン)と、Active DirectoryやSQL Serverを通じて管理するためのさまざまな操作があるので、良い成果。 –

+1

パフォーマンスとアーキテクチャはしばしばトレードオフです。 EFは最もパフォーマンスの高いデータアクセス技術ではありません。 [ここ](https://stackoverflow.com/questions/8347670/entity-framework-is-too-slow-what-are-my-options)を参照してください。それはSOがDapperと一緒に行った理由の1つです。 –

答えて

2

あなたはほぼ正しい方向にいます。ただし、この場合のViewModelはアプリケーション層、つまりMVC層に存在する必要があります。サービス層は、より一般的にはDTOとして知られるデータ転送オブジェクトを返す必要があります。

Viewのために構築されたシンプルなPOCOクラスとしてViewModelのだと思うが、それはあなたのサービス層からのさまざまなサービスによって返された様々なDTOのコレクションすることができます。 DTO

  1. 利点は、あなたが直接あなたのドメインエンティティ、すなわちあなたのEntityFramework POCOクラスを暴露されていません。しかし、DTOを一緒に避けるようにプロジェクトを小さくすることができます。

  2. 今後、iPhoneアプリケーションの場合はWebAPI機能をMVCプロジェクトに追加することにしました。新しいアプリケーションでは、サービス層も消費するWebAPIが使用されます。サービス層コードの大部分は、DTOクラスを返し、用に構築されたViewModelクラスではないため、再利用できます。

データアクセス層には、このユーザーよりも優れた説明はありません。Entity FrameWork With Repository Pattern

プロジェクトの構造については、私はタマネギのアーキテクチャをお勧めします。 Onion Architecture。この記事を十分に理解できれば、すべての設定が必要です。

+1

タマネギのリンクが壊れています – Andrei

+0

@Andrei、固定、通知のために感謝します。 – IvanJazz

+0

@IvanJazzありがとう!私はこれらの記事をすぐに読むつもりです(そしてMoshのビデオ、いつものポイント!)。そのため、ViewModel POCOはService Layerクラスのインスタンスを作成しますか?サービスレイヤー内には、クラスとそれに対応するインターフェイスがありますか? –

関連する問題