そのため、これまで、私が取り組んでいるWebサイトは、データアクセスとアプリケーションおよびビューコードを直接組み合わせた単一レイヤーのアーキテクチャに依存していました。私は最近、データアクセスサービスレイヤー(API)を実装することの利点をチームに確信させました。特に最近の水平スケーリング(ネイティブモバイルアプリケーションなど)の話では。
現在頭に浮かぶ実装は、クライアントがサービスを使用して要求するクラスにEntity Framework
データベースをマップするために 使用することです。
私は過去にこのアプローチを小規模で使用していましたが、現在はデータオブジェクトの大規模なコレクションの範囲であり、それぞれにクエリが実行される可能性のある多数の基準があり、APIの構造化方法を想像するのに問題があります。 Data Contract
WCF
データクラスのリストの例:
- 製品
- 商人
- ブランド
- 分類法
- クーポン
- ユーザー
- レビュー
- 質問
- 回答
- 等
(うまくいけば、これらのオブジェクトが関連している方法は、私の主張をするのに十分明白です)
サービス要件
- サービスは言語に依存しない必要があります(.net、php、java、Objective C)
- パターンは、1つのAPIとして機能する複数の異なるデータソースを許可する必要があります(たとえば、ユーザーはMSSQLサーバーに保存され、MySQLのレビューシステムはXMLフィードから取得されます)
- API側からオブジェクトキャッシングを実装できる必要があります
これらの各データオブジェクトは、基本的に、その列のいくつかに基づいてクエリ可能である必要があります(単一のオブジェクトまたはコレクションを返すため)。さまざまなシナリオごとに新しいAPIメソッドを作成することはできますが、これを行うにはもっと洗練された方法が必要だと思います。
リクエストの例:
- IDで単一の製品を取得します。
- 「作成日」、「価格」、または「パーセントオフ」の順に並べられた特定の販売者、ブランド、または分類法から製品のリストを取得します。
- ユーザーから送信されたすべてのレビューを取得する
- 製品のすべてのレビューを取得する
- ..。
私の調査では、APIを作成するためのいくつかの標準的なアプローチを概説したこのMSDNの記事に出くわしました。それぞれの長所と短所、および上記で説明したモデルに最も適していると思われるアプローチを聞くことに興味があります。