中間層

このセクションでは、WCF RIA サービス アプリケーションの中間層内でのドメイン サービス、共有コード、およびデータ エンティティの使用に関する情報とガイダンスを提供します。3 層アプリケーションの中間層には、プレゼンテーション層とデータ層間の対話を管理するロジックが含まれます。中間層にビジネス規則および検証チェックを適用して、データが許可される状態になっていることを確認します。たとえば、人事アプリケーションには、従業員が休暇申請を送信できるユーザー インターフェイスを用意できますが、従業員の休暇残日数が 0 未満でないことを確認する必要があります。このため、休暇申請の送信前に従業員の休暇残日数を確認するロジックを中間層に追加します。

Silverlight アプリケーションなどの RIA サービス クライアントを使いやすくするために、サーバーに適用するのと同じビジネス規則をクライアントに適用することがよくあります。これを行うには、クライアントとサーバーの中間層のコードを同期する必要があります。RIA サービス では、.NET Framework を使用して中間層のアプリケーション ロジックを記述できます。RIA サービス によって中間層のコードからプレゼンテーション層のコードが自動的に生成されるため、これらの層は常に同期されます。このトピックとサブトピックでは、ドメイン サービス、共有コード、およびデータ エンティティを使用して中間層を構築する方法について説明します。

データ アクセス層

RIA サービス を使用して中間層を開発する場合、あらゆる種類のデータ アクセス層を使用して作業できます。たとえば、次のデータ アクセス層に接続できます。

  • Entity Data Model。

  • LINQ to SQL オブジェクト モデル (これは、RIA Services Toolkit をインストールした場合にのみ使用できます)。

  • 共通言語ランタイム (CLR) オブジェクト。

  • ソースのデータを公開する Web サービス。

データ モデルに検証チェックを適用して、プレゼンテーション層から送信されるデータ値に制限を適用できます。

場合によっては、複数のテーブルに存在するデータと対話する必要があります。RIA サービス には、階層データ モデル (Order と OrderDetails のリレーションシップなど)、継承データ モデル (Parent と Child のリレーションシップなど)、およびデータ プロジェクション モデル (Customer テーブルと Address テーブルから値を取り出して 1 つのデータ モデルに渡すことによるデータの非正規化など) の変更をサポートするプログラミング フレームワークが用意されています。詳細については、「データ」を参照してください。

アプリケーションでは、さまざまなデータ ソースのデータを表示したり、複数のドメイン サービスに 1 つのエンティティを公開したりすることが必要になる場合があります。WCF RIA サービス では、さまざまな DomainContext 型のエンティティ間の参照がサポートされているため、このシナリオが可能になります。詳細については、「チュートリアル: 複数のドメイン サービス間でのエンティティの共有」を参照してください。

既定では、RIA サービス が元のエンティティ全体を変更された値と共にデータ アクセス層に渡して、データの同時実行を確認することはありません。RIA サービス は、RoundtripOriginalAttribute 属性、ConcurrencyCheck 属性、または TimeStamp 属性でマークされたメンバーのみを格納し、渡します。詳細については、「データ」を参照してください。

ドメイン サービス

ドメイン サービスは、ドメインのビジネス ロジックのパブリックな抽象化です。ドメイン サービスには、ドメイン ビジネス ロジックを構成するエンティティと操作が含まれます。RIA サービス には、データ層のビジネス ロジックのインターフェイスとして機能するすべてのクラスの基本クラスとして DomainService クラスが用意されています。ドメイン サービスを実装する際に、クライアントからのアクセスに対して公開するエンティティ クラスを指定します。また、ドメイン サービスを介して許可されるデータ操作も指定し、ドメイン サービスにアプリケーション ロジックを追加できます。クライアント アクセスで有効にするドメイン サービスごとに、RIA サービス によってクライアント アプリケーションの DomainContext クラスが生成されます。詳細については、「ドメイン サービス」を参照してください。

ドメイン サービスをセキュリティで保護する方法の詳細については、「WCF RIA Services のセキュリティ」を参照してください。

共有コード

場合によって、中間層のプロジェクトとプレゼンテーション層のプロジェクト間で共有されるコードを追加する必要があっても、そのコードをドメイン サービスまたはエンティティ クラスには配置しないことがあります。たとえば、他の多くのプロジェクトで使用される、アプリケーション ロジックを含むライブラリを参照することが必要な場合があります。または、エンティティ クラスの値を結合または変更するカスタマイズされたプロパティ ("姓, 名の最初の文字" という形式の表示名など) を作成することが必要な場合もあります。RIA サービス を使用すると、クライアント プロジェクトを変更せずにアクセスできる中間層にクラスまたはアセンブリを含めることができます。詳細については、「共有コード」を参照してください。

クライアント コード生成

RIA サービス を使用して中間層のプロジェクトとプレゼンテーション層のプロジェクトをリンクすると、RIA サービス フレームワークによって、中間層からクライアントのコードが自動的に生成されます。クライアント コードが生成される中間層のコードは、次のとおりです。

  • EnableClientAccessAttribute 属性を使用して注釈が付けられている各ドメイン サービス。

  • ドメイン サービスによって参照される各エンティティ クラス。

  • 共有の名前付け規則を使用して名前が付けられているコード ファイル (*.shared.cs または *.shared.vb) は、クライアント プロジェクトを変更しなくてもコピーされます。

この中間層のコードは、クライアント プロキシ クラスを介してクライアントで使用できます。中間層のコードが変更されると、クライアント プロキシ クラスが自動的に再生成されるため、プレゼンテーション層は常に中間層と同期されます。

詳細については、「クライアント コード生成」を参照してください。