1. はじめに
Microsoft Silverlight では、リッチ インターネット アプリケーション (RIA) を構築するための強力な基盤が提供されます。このドキュメントで紹介する .NET RIA Services を使用すると、より簡単に基幹業務 (LoB) RIA を開発できるようになります。このサービスは、.NET Framework と Silverlight で提供される、既存のデータ アクセス層コンポーネントとプレゼンテーション コンポーネントを補完します。また、このサービスは ASP.NET を基に構築されていて、Web アプリケーションで使用されているいくつかの共通パターンの体系化、強化、およびサポートを実現します。
.NET RIA Services は、フレームワーク、ツール、およびサービスを通じて、n 層アプリケーションを構築するための複雑な作業に対処します。フレームワーク コンポーネントは、アプリケーション ロジックと検証機能をプレゼンテーション層で簡単に使用できるように、それらを記述するための規範的なパターンをサポートします。ツールは、1 つのソリューション内のクライアント プロジェクトと中間層プロジェクトを関連付け、クライアント プロジェクト内に適切なコードを生成することによって、既存の Visual Studio の機能を強化します。付属のサービスは、規範的なパターンを使用して、認証やユーザー設定の管理など、よく使用される機能をサポートします。
Mix 2009 コンファレンスで発表されたプレビュー版は、より優れたエンド ツー エンドの操作性を実現するために、Silverlight ツールキットで提供されるコンポーネントとの統合に重点を置いています。また、このプレビュー版は、そのようなコンポーネントを使用して、ASP.NET アプリケーション内で HTML とスクリプトから成るプレゼンテーション層を構築するためのガイドラインを提供します。
このドキュメントでは、.NET RIA Services のプレビュー版における重要な側面について説明します。このセクションでは、n 層の RIA を構築するうえでの課題と、それらの課題に対処するための手法について説明します。それ以降のセクションでは、重要な機能に関する説明を、作業内容別のクイック スタート ガイドとして提供します。これらのクイック スタート ガイドは、単純かつ包括的な例を通じて .NET RIA Services を紹介する、詳細なチュートリアルの内容を補完します。
目次:
- n 層アプリケーション内でデータを使用するうえでの課題
- 重要なメリット
- 重要な概念
- ロードマップ
1. n 層アプリケーション内でデータを使用するうえでの課題
LoB アプリケーションによって使用されるデータは、異なる層にまたがって移動する必要があります。このデータは、基本的な作成、読み取り、更新、および削除 (CRUD) 操作を通じて作成および使用される場合もあれば、経費報告書上の承認操作など、ドメインに固有のカプセル化されたカスタム操作を通じてアクセスされる場合もあります。インターネット アプリケーション内では、クライアントと中間層サーバーとの間に信頼の境界が存在します。このため、クライアント層でどのリソースを使用できるか、およびどの操作が許可されるかを、パターン化された方法で示すことが重要です。また、最小限のプラミング コードを追加することによって、クライアント上で簡単にリソースを使用でき、プレゼンテーション層から簡単に操作を呼び出すことができるようになれば、生産性も向上します。
開発者は、リソースと操作を定義するだけでなく、データを作成時または更新時に検証する必要があります。プレゼンテーション層では、ユーザーにすばやくフィードバックを返すために、検証処理を行う必要があります。また、中間層では、アプリケーション用に定義された規則を確実に適用するために、同様の検証処理を行う必要があります。このため、複数の層にまたがる共通の検証処理もあれば、リソースや操作と統合する必要がある、各層に固有の検証処理もあります。
最後に、アプリケーションが必要とするサービスの多くは、他のアプリケーションと共有されることもある、非常に使用頻度の高いサービスです。例としては、認証、役割、ユーザー設定などが挙げられます。n 層アプリケーションでは、このようなサービスを管理し、リソースや操作の使用と統合する必要があります。
次の図は、n 層アプリケーションを簡単に示した図です。.NET RIA Services は、ビューとデータ アクセス層 (DAL) の間にある四角形の部分に重点を置いて、先ほど説明した、複数の層を使用するうえでの課題に対処します。
.jpg)
次に、.NET RIA Services によってもたらされる重要なメリット、および上記のような課題に対処するために使用される .NET RIA Services の主要な構造について説明します。
ページのトップへ
2. 重要なメリット
.NET RIA Services によってもたらされる重要なメリットは、次のとおりです。
- データのエンド ツー エンドの使用がサポートされます。
- アプリケーションのクライアント コードとサーバー コードの開発を一元化できます。
- 一般的なシナリオを対象とした、一連の規範的なパターンとサービスを使用することによって、生産性を向上させることができます。
.NET RIA Services は、データのエンド ツー エンドの使用に重点を置いています。データは任意のデータ アクセス層 (DAL) を通じて取得できます。また、データをプレゼンテーション層で使用するために加工したり、検証やアクセス制御に適したメタデータを使用して注釈を付加したりできます。この新しいフレームワーク コンポーネントは、制御された一連の操作を通じて、異なる層へのデータとメタデータの移動をサポートします。
.NET RIA Services は、アプリケーションの複数の層を同時に構築できる一連のツールを提供することによって、異なる層と信頼の境界にまたがってデータを渡すアプリケーションの開発を単純化します。アプリケーション ロジックは、層と信頼の境界を意識しながら、各層で .NET と Silverlight の機能を活用すると共に、先ほど説明したデータとメタデータのエンド ツー エンドの移動に関するサポートを利用します。また、コード生成機能と共有コードによって、層と信頼の境界を意識しながらロジックを共有するための複数の選択肢が提供されるので、さらに大きなメリットを得ることができます。
.NET RIA Services は、リソースに対する一連の操作を公開するためのパターンを定義およびサポートします。開発者は、DomainService を作成して、リソースに対する一連の操作を定義します。.NET RIA Services のフレームワークとツールは、連携して、対応するクライアント層のコードを生成します。生成されたコードは、データ バインドや検証などに使用できます。認証とユーザー設定用のサービスは、手を加える必要なく、そのままの状態で操作やリソースと共に使用できます。.NET RIA Services のパターンとサービスは、対応する ASP.NET のパターンとサービスを基盤として使用し、ASP.NET Web アプリケーションでよく使用されるいくつかのパターンを拡張することによって、それらのパターンを、Silverlight によって実現される高度なプレゼンテーション層で使用できるようにします。現在のプレビュー版では、主に、Silverlight によって実現されるエンド ツー エンドの操作性を通じて、このパターンの例を確認できます。また、開発段階の基本的な HTML ビューを通じて、補足的な知識を得ることができます。このプレビュー版では、ユーザーが作成したオブジェクトだけでなく、Entity Framework DAL と LINQ to SQL DAL が直接サポートされます。ただし、このプレビュー版は、さまざまなプレゼンテーション テクノロジと DAL にまたがってアプリケーションを拡張できるように設計されています (下図参照)。
.gif)
ページのトップへ
3. 重要な概念
このセクションでは、いくつかの重要な概念について説明します。これらの概念については、チュートリアル ドキュメントと、以降のセクションで、さらに詳しく説明します。
操作を作成するためのメイン クラスは、DomainService です。次の例は、人事 (HR) アプリケーションに使用する DomainService クラスである、HRService を示しています。HRService は、LINQ to SQL DAL に対応した .NET RIA Services の基本クラスである LinqToSqlDomainService から派生したクラスで、LINQ to SQL の DataContext 型である EmployeeDataContext によってパラメーター化されます。このクラスには、3 つの操作が含まれています。これらは、クエリを実行するための操作、更新を行うための操作、および長期有給休暇を承認するためのカスタム操作です。
これらの操作は、"エンティティ" 上で定義されます。エンティティは、キーによって定義される ID を持つオブジェクトです。DAL 内で使用される Employee エンティティは、HRService でも使用されます。開発者は、オプションのメタデータを追加して、エンティティを加工したり、エンティティのプロパティを検証したりできます。
[EnableClientAccess()]
public class HRService : LinqToSqlDomainService<EmployeeDataContext>
{
public IQueryable<Employee> GetEmployees()
{
// Restrict access as appropriate
return (
from e in Context.Employees
where e.SalariedFlag == true
select e);
}
public void UpdateEmployee(Employee current, Employee original)
{
// Check/enforce app-specific rules for changes
Context.Employees.Attach(current, original);
}
public void ApproveSabbatical(Employee emp)
{
// Ensure that employee has required tenure and annual review ratings
}
.NET RIA Services は、[EnableClientAccess] 属性を認識し、対応するクライアント層のクラスを生成します。これらは、HRService に対応する HRContext と、クライアント用の Employee エンティティです。これらのクラスについては、この後説明します。DomainContext クラスは、生成されたエンティティ クラスと連携して、操作の呼び出し、結果の蓄積、オブジェクト ID と変更の追跡などの基本的なサービスを提供します。EntityList は、データ バインド用の豊富なコレクションを提供します。
public sealed partial class HRContext : DomainContext
{
...
public EntityList<Employee> Employees { ... }
// Invokes server-side method GetEmployees asynchronously
//and loads EntityList
public void LoadEmployees() { ... }
// Overload of the above for using LINQ query to be sent to the server
public void LoadEmployees(IQueryable<Employee> query,
MergeOption mergeOption, object userState) { ... }
public void ApproveSabbatical(Employee emp) { ... }
}
public sealed partial class Employee : Entity
{
...
}
さらに開発者は、共有コードを使用して、検証やその他の処理を行うことができます。次の図 は、概念的に見たビルド ブロック間の処理の流れを示しています。
.jpg)
ページのトップへ
4. ロードマップ
別途提供されるチュートリアル ドキュメントは、実践形式の学習の第一歩として最適です。このドキュメントに含まれている補足的なクイック スタート ガイドでは、上記の概念と、チュートリアル ドキュメントの内容を補完する特定の作業を完了する方法について説明します。
次のセクションでは、まず Visual Studio における RIA Services プロジェクトの構造について概説します。続いて、主要な CRUD 操作とカスタム操作の作成と使用について概説します。その後のセクションでは、検証に使用するメタデータと共有コードの概念について説明します。さらにその後、認証、役割、およびプロファイル サービスの定義と使用について説明し、最後に、宣言型データ バインドに使用される、Silverlight と ASP.NET の DomainDataSource について説明します。