はじめに
前編ではWCF RIA Servicesを使って、データの検索と更新をデザイナーを利用して作成しました。今回は検証や共有コードといったWCF RIA Servicesの裏側のコードを確かめながら、WCF RIA Servicesがどのようにn階層のアプリケーションを実現しているか、どんなところで気をつけるべきかを確認していきます。
WCF RIA ServicesをSilverlightプロジェクトに適用する方法や、DomainContextに定義されたデータソースをSilverlightで利用する方法については前編を確認してください。
自動生成コードに迫る
前編で紹介したサンプルには、WCFの呼び出しコードや、データの検証コードは存在していないように見えます。WCF RIA Servicesのアプリケーションでは、サービスの呼び出しやデータの検証をどのように行っているのでしょうか。
前編のコラムでも少し触れましたが、これらの仕事はサーバ側で定義した情報を元に、WCF RIA Servicesが自動生成したコードが行っています。
自動生成コードを確認したい場合は、一度ソリューションをビルドした後、Visual Studioのソリューションエクスプローラで、Silverlightアプリケーションのプロジェクトのファイルをすべて表示します。Generated_Codeフォルダの下に、*.Web.g.csや、Share.csといったファイルが確認できます(図1)。
WCF RIA Servicesでは、これらの自動生成されたコードがデータの検証やサービスの呼び出しといった仕事を請け負っています。
エンティティとメタデータクラス
サーバ側に定義したエンティティクラスが、Silverlightのコードとしてどのように利用されているか見ていきましょう。
今回のサンプルでは、データアクセスにはEntity Frameworkを利用しているため、エンティティデータの本体は「お小遣いEntites.Designer.cs」に定義されています。
図2は、お小遣いデータモデルを定義した直後のソリューションエクスプローラの様子です。
このプロジェクトに対し、前編で解説したようにドメインサービスを追加すると、図3のようにデータに対する操作を定義する「お小遣いService.cs」と、エンティティデータのメタ情報を定義する「お小遣いService.metadata.cs」がソリューションに追加されます。
ドメインサービスの本体である「お小遣いServices.cs」については後述するため、まずは「お小遣いService.metadata.cs」について見ていきましょう。