2009年4月13日月曜日

.NET RIA Services Overviewを読んで

 

Microsoft .NET RIA Services Overview ~ Mix09 Preview

 

Mix09のタイミングで公開開始されたPDFを一通り読んでみたので、忘れないようにメモ。

 

  • N-Tierアーキテクチャでのレイヤ間モデル・ビジネスロジック共有のためのフレームワーク&ガイドラインといったところで、とくにSilverlightにフォーカスしたもの。
  • EntityFrameworkまたはLINQtoSQLをサポートし、サーバーサイドでのモデルとビジネスロジック実装をクライアント側からも共有できるように、Proxyの自動生成を行う。
  • サーバー側実装はDomainServiceクラス(EF/LTSの選択によって継承元が異なる)に行う。
  • DomainServiceを参照するクライアントプロジェクトではビルド時に自動的にProxyクラスが生成される。また、Entityだけではなく、BLもProxyに反映される。
  • クライアント側ではDomainContextクラスを使用する。DomainContextではEntityの状態管理、変更トラックなどを行う。
  • クライアント側でもサーバー側と同じNameSpace、クラス名でモデルへアクセスできる。またINotifyPropertyChangeも自動的に実装される。
  • サーバー側のCRUD処理については、DomainContextにも同様のメンバが用意される。ただし更新系についてはあくまでContext内の状態変更を行うだけなので、サブミットされるまでは実際に更新されない。
  • クエリ系メソッドはクライアント側ではご丁寧に名前が変更される(Get,Fetch,RetrieveなどからLoadに)。サーバー問い合わせが非同期で行われているんだよ!との注意喚起を促すため。
  • 全般に規約が重視されているので、ファイル名やメンバ名などに注文がつく(属性によって回避可)。開発者の労力削減とチーム開発での可読性を向上する狙い。
  • カスタムのビジネスロジックも共有可能。その場合CustomやServiceOperationなどの属性を付加する。
  • EntityのバリデーションはSystem.ComponentModel.DataAnnotationsに含まれる属性でマーク可能。もしお手製が必要なら共有クラスにValidatorを追加する。

 

なんて感じでかなりパワフルなプロキシを作ってくれるという代物です。

自動生成のプロキシに依存する部分が大きいだけに、ここがスキ・キライが分かれるところかもしれません。

でもBLの共有も含めてひとくくりにレイヤの壁を取っ払いたいときには、現実的で手っ取り早いアーキテクチャではないでしょうか。

規約ベースなところも好感で、小規模・短納期のプロジェクトでは主流になっておかしくないと思います。

 

また、最後のほうに Silverlight用の DomainDataSource の説明があって、RIA ServicesおよびDataGridと連携して、

  • データの自動ロード
  • コントロールへのパラメーター割り当て
  • ソート
  • グループ化
  • フィルタリング
  • ページング
  • エディット

 

などがXAMLで記述できるとのこと。

Validatorによる検証も含めて、DomainドリブンなUIがSilverlight上でもサクッと実現できるのは非常にいい感じです。

あとはADO.NET DataServicesとの棲み分けが気になるところですね。

まだ日本語環境対応版の気配がないんで、仮想環境に英語版VSをインストールして試してみようかと思います。

0 件のコメント: