http://biki.jp.net/enterprisenet
エンタープライズ.NET
WCF RIA Service
SilverlightとWCF RIA Serviceによる
ビジネスアプリケーション開発
http://biki.jp.net/enterprisenet
目次
 RIAアプリケーションとは
 サーバーサービスの構築
 ドメインサービス
 データ操作
 クエリーメソッドの追加
 ドメイン サービスへのアプリケーション ロジックの追加
 ドメインサービスのデータ
 共有エンティティ
 クライアント・サーバー間の共有コード
 クライアントUIの構築
 レイアウト作成
 DataForm
 DomainContext と操作
 クライアントでのエラー処理
 生成されたコードのカスタマイズ
2
http://biki.jp.net/enterprisenet
RIAアプリケーションとは
 Silverlight アプリケーションなどのリッチ インターネット アプリケーション (RIA) 用の
n 層のアプリケーション
 Silverlight
 動画やアニメーションを利用したリッチなWebコンテンツや業務用アプリケーションを動か
すためのWebブラウザプラグイン(追加機能)。
 ブラウザー外実行 ・豊富な標準コントロール ・高度なカスタマイズ性
 データ バインディング ・.NET Framework との互換性 ・印刷機能
 Web サービス対応
 WCF RIA Service
 WCF RIA サービス は、Silverlight アプリケーションなどのリッチ インターネット アプリケー
ション (RIA) 用の、n 層のソリューションの開発を簡略化する。
 RIA サービス は、サーバー上のアプリケーション ロジックを手動で複製せずに、そのロジックを RIA
サービス クライアントが使用できるようにするフレームワーク コンポーネント、ツール、およびサー
ビスを提供する。
3
http://biki.jp.net/enterprisenet
サーバーサービスの構築
 データアクセス層
 Entity Framework
 ドメインサービス
4
http://biki.jp.net/enterprisenet
ドメインサービス
 ドメイン サービスは、WCF RIA サービス アプリケーション
のビジネス ロジックをカプセル化した Windows
Communication Foundation (WCF) サービス
 ドメイン サービスとデータソース
 DomainService クラスは、ドメイン サービスとして機能するす
べてのクラスの基本
 ADO.NET エンティティ モデルにバインドするドメイン サービス
を作成するには、LinqToEntitiesDomainService から派生
 LINQ to SQL クラスを公開するドメイン サービスを作成する場
合は、LinqToSqlDomainService から派生
 RIA Services Toolkit で提供
5
http://biki.jp.net/enterprisenet
ドメインサービス
 ドメインサービスの公開
 ウイザードでドメインサービスを作成することが可能
 ドメイン サービス クラスは、サービスをクライアント プロジェクトで使
用できるようにするため、EnableClientAccessAttribute 属性でマーク
する必要がある
 ウイザードで [クライアント アクセスの有効化] チェック ボックスをオ
ンにすると、ドメイン サービスに自動的に適用される
 クライアントへの公開
 EnableClientAccessAttribute 属性がドメイン サービスに適用されると、
RIA サービス によってクライアント プロジェクトに対応するクラスが生
成される
 たとえば、EnableClientAccessAttribute 属性を、Employee というエンティ
ティを公開する HRService というドメイン サービスに適用すると、RIA サー
ビス によって、HRContext というドメイン コンテキストがクライアント プロ
ジェクトに生成され、Employee エンティティのクライアント バージョンも生
成されます
6
http://biki.jp.net/enterprisenet
データ操作
 CRUD操作
 データ操作の基本操作。決まった操作
 Query
 クエリ メソッドは、エンティティの 1 つのインスタンスか、T が有効なエン
ティティ型である IEnumerable または IQueryable を返す必要がある
 オーバーロードされたメソッドは使用できない
 Update
 Update、Change、または Modifyから開始
 戻り値がなし、パラメータがエンティティ型
 Insert
 Insert、Add、または Createから開始
 戻り値がなし、パラメータがエンティティ型
 Delete
 Delete または Removeから開始
 戻り値がなし、パラメータがエンティティ型
7
http://biki.jp.net/enterprisenet
データ操作
 複雑な操作
 Invoke
 CRUD以外のメソッド呼び出し用
 任意の戻り値、パラメータ
 追跡または遅延実行を行わずに実行する必要のある操作を実装します。このメ
ソッドは、エンティティ以外のデータを使用する場合か、代わりにクエリ操作、更
新操作、挿入操作、または削除操作を使用できない場合にのみ使用されます。
 Named Update
 サーバーサイドで引数をもらってアプリケーションロジックを記述する場合に利用
 エンティティに関連するトランザクション処理の実行
 単純な変更操作に分類されないカスタム操作を実装
 Insert、Update、または Delete のプレフィックスから始まらない任意の名前
 戻り値がなし、パラメータがエンティティ型と任意数のその他のパラメーター
 HasSideEffectsをtrueにするとPOSTで発行される
 http://hashtagfail.com/post/1000967093/wcf-routing-ria-services
 GetはキャッシュされるためそれをさけるためにPOSTで実行するだけ。SideEffect
には深い意味は無さそう
8
http://biki.jp.net/enterprisenet
クエリーメソッドの追加
 クエリーメソッドの追加とカスタマイズ
 特定の目的ごとにクエリーメソッドを追加、カスタマイズできる
 既存のクエリーにソート順を追加の検索条件を付与してカスタマイズ
する
 1つのエンティティを返すメソッドの追加
 IsComposableをfalseにする。IsComposableをtrueにするとクライアントで検
索条件を追加できる
 パラメータを受け取るメソッドの追加
 検索条件をサーバーのビジネスロジックで組み立てる場合に利用する
9
http://biki.jp.net/enterprisenet
ドメイン サービスへのアプリケーション ロジックの追
加
 ドメイン サービス クラスに必要なアプリケーション ロジックを追加
 ウィザードによって生成されるコードに追加
 ロジックは、直接操作メソッドに追加することも、操作メソッドから呼び出されるメソッドに
追加することも可能
 CRUDメソッドにビジネスロジックを追加
 ウイザードで[編集の有効化] を選択すると雛形を作成してくれる
 エンティティを受け取って処理を記述する
 ビジネスロジック上の検証や計算処理を記述できる
 名前付き更新メソッドを追加
 クライアントでの操作をサーバーサイドでリプレイする。1つのエンティティに対して1回だ
け
 両方とも同じ
 emp.ResetPassword();、Context.ResetPassword(emp);
 呼び出し操作を追加
 エンティティに関連付けない処理
 ※ Invoke属性は不要、LoadやSubmitChangesする必要はない
 その他
 クライアントからサービスとして呼び出されないように、IgnoreAttribute 属性でマーク
10
http://biki.jp.net/enterprisenet
ドメインサービスのデータ
 データの注釈と検証
 DataTypeAttribute
 RangeAttribute
 RegularExpressionAttribute
 RequiredAttribute
 StringLengthAttribute
 CustomValidationAttribute
 INotifyDataErrorInfo
 同期および非同期の検証をサポートするメンバーを定義します
 データの同時実行
 既定では、RIA サービス が元のエンティティ全体を変更された値と共にデータ アクセス層
に渡して、データの同時実行を確認することはありません。その代わり、RIA サービス は、
RoundtripOriginalAttribute 属性でマークされたメンバーのみを格納し、渡します。
 RIA サービス は、RoundtripOriginalAttribute 属性、ConcurrencyCheckAttribute 属性、または
TimestampAttribute 属性でマークされたメンバーのみを格納
 トランザクション
 RIA サービス フレームワークによってトランザクションが自動的に作成されることはありま
せんが、変更の送信時に明示的なトランザクションを追加できます
11
http://biki.jp.net/enterprisenet
ドメインサービスのデータ
 コンポジットデータ(合成階層)
 複数のエンティティを一つ塊にして処理できる仕組み
 子孫エンティティのプロパティにCompositionAttribute 属性を付与
 子孫エンティティを読み込むためにはIncludeAttribute 属性を適用し、クエリ メソッドに
子孫エンティティを含める必要がある
 ドメインサービス
 親エンティティまたは子孫エンティティのクエリ メソッドが許可される
 親エンティティなしで読み込まれた子孫エンティティを変更することはできない(例外)
 子孫エンティティで許可される操作
 親エンティティで更新が許可されている場合、子孫エンティティでは更新、挿入、および削除が
許可される
 親エンティティに名前付き更新メソッドがある場合、すべての子孫で更新が有効になっている
必要がある
 親エンティティで挿入または削除が許可されている場合、子孫エンティティでは対応する操作
が再帰的に許可される
 クライアント プロジェクト内での規則
 子孫エンティティに変更が含まれる場合、変更の通知が親エンティティまで伝達される
(HasChanges)
 親エンティティを変更すると、その子孫エンティティすべて (変更されていない子孫を含む) が変
更セットに含まれる
12
http://biki.jp.net/enterprisenet
ドメインサービスのデータ
 プレゼンテーションモデル
 データ アクセス層内の複数のエンティティからデータを集計するデータ
モデル
 データ アクセス層内のエンティティをクライアントに直接公開しないため、プレゼ
ンテーション モデルのみを変更することで、データ アクセス層での変更に対応で
きる
 る
 ドメインサービス
 独自のプレゼンテーションモデルを作成してカスタムのドメインサービスを作成
 プレゼンテーションモデルにも一意識別用のKey項目が必要
 ドメインサービスはDomainServiceをベースにクエリメソッドを定義してデータ層を検索す
る
 更新処理を定義することも可能
 プレゼンテーションモデルの各項目の変更内容を対応するエンティティに設定する
 変更を送信した後、中間層ロジックまたはデータ ソースで設定されている値をクライアン
トに渡すことができる
 エンティティの値をプレゼンテーション モデルに再度マップするための Associate メソッド
が用意されています
13
http://biki.jp.net/enterprisenet
ドメインサービスのデータ
 継承
 公開する派生型を KnownTypeAttribute 属性に含める必要がある
 ドメイン サービスで公開した継承階層をそのままの構造で、クライアン
ト プロジェクトに生成される。ルート クラスはEntity クラスから派生し、
各派生クラスが生成される
 クエリメソッド、名前付き更新メソッドもインタフェースはサーバーの定義
と同じ
 制限
 継承はエンティティ型でのみサポートされています
 ドメイン サービス操作の戻り値またはパラメーターでは、インターフェイス型がサ
ポートされていません
 継承階層内の型のセットは、コード生成時に認識されている必要があります
 virtual 修飾子は許可されていますが、対応するエンティティ型がクライアントで
生成されるときは無視されます
 ドメイン サービス操作に対するメソッドのオーバーロードは許可されていません
 new (C#) キーワードと Shadows (Visual Basic) キーワードはエンティティ型では使
用できません
14
http://biki.jp.net/enterprisenet
ドメインサービスのデータ
 関連付け
 Entity Frameworkで生成している場合はAssociationAttributeを特
別指定する必要はない
 Include属性をつけるとクライアント側にもプロパティが生成される
 複合型(Complex Type)
 Entity
 クライアントではComplexObjectをベースになる
15
http://biki.jp.net/enterprisenet
共有エンティティ
 エンティティは、WCF RIA サービス アプリケーション内の
複数のドメイン サービス間で共有することができる
 要は他のドメインサービスのエンティティを使えるということ
 ドメインサービスを分けて開発できる
 名前付更新はコンテキストを注意する
 複数のコンテキストを利用している場合
 それぞれのDomainServiceでエンティティを宣言した場合
はドメインサービスのContextでオブジェクトは別になる。
型は同じ
 名前付更新は間違ったコンテキストで行うと例外で通知
してくれる
16
http://biki.jp.net/enterprisenet
クライアント・サーバー間の共有コード
 共有ソース ファイル
 共有の名前付け規則 (*.shared.cs または *.shared.vb)) を使
用してファイルを共有する場合は、ソース コード ファイルを共
有するための "プッシュ" モデルを実装します。共有ファイル
は、コンパイル時に中間層プロジェクトからクライアント プロ
ジェクトにアクティブにコピーされます
 リンク ファイル
 リンク ファイルの方法を使用する際は、ソース コード ファイル
を共有するための "プル" モデルを実装します。クライアント
プロジェクトにはファイルのコピーは含まれません。代わりに、
クライアント プロジェクトはサーバー プロジェクト内のファイル
を参照するだけです
17
http://biki.jp.net/enterprisenet
クライアントUIの構築
 Silverlightによる画面作成
 レイアウト作成
 入力検証
 画面遷移
 サーバーサービスの利用
18
http://biki.jp.net/enterprisenet
レイアウト作成
 XAMLで画面レイアウトを作成する
 主なコントロール
 TextBox
 Label(SDK)
 ComboBox
 CheckBox
 DatePicker(SDK)
 Button
 DataGrid
 DataForm(SDK)
19
http://biki.jp.net/enterprisenet
DataForm
 単票編集するためのフォーム
 コレクションを取り扱うためDataGridの単票版と考えてもいいかも
 機能
 データ移動
 編集 (鉛筆)、新しいレコードの追加 (プラス記号)、およびレコードの削
除 (マイナス記号)
 編集モード時にキャンセルとコミットができる
 レイアウト
 Display属性を利用してラベルタイトルやツールヒントを指定可能
 検証
 Required, StringLength, Range, RegularExpression, Customevalidationを指定して
検証ルールを指定できる
 動作を換える仕組み
 AutoCommit
 AutoEdit
 AutoGenerateFields
 LabelPosition
20
http://biki.jp.net/enterprisenet
DomainContext と操作
 WCF RIA サービス を使用して Silverlight プロジェクトと中間層プロジェクト
をリンクすると、RIA サービス により、中間層で公開したエンティティおよび
操作に基づいて、クライアント アプリケーションのクライアント プロキシ ク
ラスが生成されます
 DomainContext から派生するクラス
 ドメイン サービスと同じ名前空間を使用したドメイン コンテキスト クラスが生成されま
す
 既定では、ドメイン コンテキストの名前には、ドメイン サービスの名前付けに使用され
る Service ではなく、Context が接尾辞として使用されます。たとえば、HRService という
名前のドメイン サービスには、HRContext という名前の対応するドメイン コンテキスト
があります
 DomainContext クラスでは、クエリ、送信、および呼び出しの各ドメイン操作がサポー
トされています。各種操作には、進行中の非同期操作を表す、対応するクラスがあり
ます。このようなクラスとしては、LoadOperation、SubmitOperation、および
InvokeOperation があります。
 エンティティ クラスとエンティティ プロキシ クラス
 中間層内のエンティティ クラスと同じ名前および名前空間でプロキシ クラスが生成さ
れます。
 カスタム属性
 共有コード
21
http://biki.jp.net/enterprisenet
DomainContext と操作
 クエリ
 クエリ メソッドの名前は、ドメイン サービスのクエリ メソッドに Query という接尾辞を加えたもの。 EntityQuery
オブジェクトを返します。
 ドメイン コンテキストからのすべてのクエリが非同期的に実行されます。
 クエリを実行するには、Load メソッドにパラメーターとして EntityQuery オブジェクトを渡す
 LINQを利用するためにはSystem.ServiceModel.DomainServices.Clientの名前空間をインポート
 利用可能なクエリ演算子
 Where、OrderBy、ThenBy、Skip、Take
 データの変更
 エンティティを更新、挿入、および削除するためのメソッドはドメイン コンテキスト内に生成されません。代わり
に、ドメイン コンテキストの SubmitChanges メソッドを使用すると、クライアントの変更内容がサーバにまとめて
送信され処理される
 また、DomainContext クラスには、HasChanges プロパティと EntityContainer プロパティも用意されており、保留
中の変更を評価できます。
 名前付き更新メソッド
 ドメイン サービスのメソッドと同じ名前が生成
 クライアント プロジェクトで、メソッドを呼び出しても、実際には SubmitChanges が呼び出されるまでこのメソッド
は実行されません
 エンティティのインスタンスを介しても呼び出すことができる
 呼び出し操作
 ドメイン サービスの各呼び出し操作に使用するメソッドが生成される
 呼び出し操作はすぐに実行されます。SubmitChanges メソッドは呼び出しません
22
http://biki.jp.net/enterprisenet
クライアントでのエラー処理
 WCF RIA サービス では、データ操作のコールバック メソッドを
指定し、そのコールバック メソッドでエラーをチェックすること
で、エラーを処理します
 データ読み込み時のエラー処理(いずれか)
 コールバック メソッドのパラメーターを持つ Load メソッドを使用しま
す。このコールバック メソッドでは、エラーを処理し、例外がスローさ
れていないことを示す MarkErrorAsHandled メソッドを呼び出します。
 データ送信時のエラー処理
 SubmitChanges メソッドを使用して、コールバック メソッドをパラメー
ターとして指定します。このコールバック メソッドでは、エラーを処理
し、例外がスローされていないことを示す MarkErrorAsHandled メ
ソッドを呼び出します。
 呼び出し操作によるエラー処理
 呼び出し操作を呼び出すときにコールバック メソッドを含めます。こ
のコールバック メソッドでは、エラーを処理し、例外がスローされて
いないことを示す MarkErrorAsHandled メソッドを呼び出します。
23
http://biki.jp.net/enterprisenet
生成されたコードのカスタマイズ
 RIA サービス では、生成されたコードに部分メソッドが用意さ
れており、このメソッドを個別のコード ファイルに実装して、ク
ライアント層コードをカスタマイズすることができます
 部分メソッド
 ドメイン コンテキスト クラス
 OnCreated()
 エンティティ クラス
 OnCreated()
 OnLoaded(boolean)
 On[PropertyName]Changing
 On[PropertyName]Changed
 On[CustomMethodName]Invoking
 On[CustomMethodName]Invoked
24
http://biki.jp.net/enterprisenet
資料
 http://msdn.microsoft.com/ja-
jp/library/ee707344(v=vs.91).aspx
 http://www.nikhilk.net/RIAServices-Link-Listing-1.aspx
25

エンタープライズ.Net RIAサービス

  • 1.
    http://biki.jp.net/enterprisenet エンタープライズ.NET WCF RIA Service SilverlightとWCFRIA Serviceによる ビジネスアプリケーション開発
  • 2.
    http://biki.jp.net/enterprisenet 目次  RIAアプリケーションとは  サーバーサービスの構築 ドメインサービス  データ操作  クエリーメソッドの追加  ドメイン サービスへのアプリケーション ロジックの追加  ドメインサービスのデータ  共有エンティティ  クライアント・サーバー間の共有コード  クライアントUIの構築  レイアウト作成  DataForm  DomainContext と操作  クライアントでのエラー処理  生成されたコードのカスタマイズ 2
  • 3.
    http://biki.jp.net/enterprisenet RIAアプリケーションとは  Silverlight アプリケーションなどのリッチインターネット アプリケーション (RIA) 用の n 層のアプリケーション  Silverlight  動画やアニメーションを利用したリッチなWebコンテンツや業務用アプリケーションを動か すためのWebブラウザプラグイン(追加機能)。  ブラウザー外実行 ・豊富な標準コントロール ・高度なカスタマイズ性  データ バインディング ・.NET Framework との互換性 ・印刷機能  Web サービス対応  WCF RIA Service  WCF RIA サービス は、Silverlight アプリケーションなどのリッチ インターネット アプリケー ション (RIA) 用の、n 層のソリューションの開発を簡略化する。  RIA サービス は、サーバー上のアプリケーション ロジックを手動で複製せずに、そのロジックを RIA サービス クライアントが使用できるようにするフレームワーク コンポーネント、ツール、およびサー ビスを提供する。 3
  • 4.
  • 5.
    http://biki.jp.net/enterprisenet ドメインサービス  ドメイン サービスは、WCFRIA サービス アプリケーション のビジネス ロジックをカプセル化した Windows Communication Foundation (WCF) サービス  ドメイン サービスとデータソース  DomainService クラスは、ドメイン サービスとして機能するす べてのクラスの基本  ADO.NET エンティティ モデルにバインドするドメイン サービス を作成するには、LinqToEntitiesDomainService から派生  LINQ to SQL クラスを公開するドメイン サービスを作成する場 合は、LinqToSqlDomainService から派生  RIA Services Toolkit で提供 5
  • 6.
    http://biki.jp.net/enterprisenet ドメインサービス  ドメインサービスの公開  ウイザードでドメインサービスを作成することが可能 ドメイン サービス クラスは、サービスをクライアント プロジェクトで使 用できるようにするため、EnableClientAccessAttribute 属性でマーク する必要がある  ウイザードで [クライアント アクセスの有効化] チェック ボックスをオ ンにすると、ドメイン サービスに自動的に適用される  クライアントへの公開  EnableClientAccessAttribute 属性がドメイン サービスに適用されると、 RIA サービス によってクライアント プロジェクトに対応するクラスが生 成される  たとえば、EnableClientAccessAttribute 属性を、Employee というエンティ ティを公開する HRService というドメイン サービスに適用すると、RIA サー ビス によって、HRContext というドメイン コンテキストがクライアント プロ ジェクトに生成され、Employee エンティティのクライアント バージョンも生 成されます 6
  • 7.
    http://biki.jp.net/enterprisenet データ操作  CRUD操作  データ操作の基本操作。決まった操作 Query  クエリ メソッドは、エンティティの 1 つのインスタンスか、T が有効なエン ティティ型である IEnumerable または IQueryable を返す必要がある  オーバーロードされたメソッドは使用できない  Update  Update、Change、または Modifyから開始  戻り値がなし、パラメータがエンティティ型  Insert  Insert、Add、または Createから開始  戻り値がなし、パラメータがエンティティ型  Delete  Delete または Removeから開始  戻り値がなし、パラメータがエンティティ型 7
  • 8.
    http://biki.jp.net/enterprisenet データ操作  複雑な操作  Invoke CRUD以外のメソッド呼び出し用  任意の戻り値、パラメータ  追跡または遅延実行を行わずに実行する必要のある操作を実装します。このメ ソッドは、エンティティ以外のデータを使用する場合か、代わりにクエリ操作、更 新操作、挿入操作、または削除操作を使用できない場合にのみ使用されます。  Named Update  サーバーサイドで引数をもらってアプリケーションロジックを記述する場合に利用  エンティティに関連するトランザクション処理の実行  単純な変更操作に分類されないカスタム操作を実装  Insert、Update、または Delete のプレフィックスから始まらない任意の名前  戻り値がなし、パラメータがエンティティ型と任意数のその他のパラメーター  HasSideEffectsをtrueにするとPOSTで発行される  http://hashtagfail.com/post/1000967093/wcf-routing-ria-services  GetはキャッシュされるためそれをさけるためにPOSTで実行するだけ。SideEffect には深い意味は無さそう 8
  • 9.
    http://biki.jp.net/enterprisenet クエリーメソッドの追加  クエリーメソッドの追加とカスタマイズ  特定の目的ごとにクエリーメソッドを追加、カスタマイズできる 既存のクエリーにソート順を追加の検索条件を付与してカスタマイズ する  1つのエンティティを返すメソッドの追加  IsComposableをfalseにする。IsComposableをtrueにするとクライアントで検 索条件を追加できる  パラメータを受け取るメソッドの追加  検索条件をサーバーのビジネスロジックで組み立てる場合に利用する 9
  • 10.
    http://biki.jp.net/enterprisenet ドメイン サービスへのアプリケーション ロジックの追 加 ドメイン サービス クラスに必要なアプリケーション ロジックを追加  ウィザードによって生成されるコードに追加  ロジックは、直接操作メソッドに追加することも、操作メソッドから呼び出されるメソッドに 追加することも可能  CRUDメソッドにビジネスロジックを追加  ウイザードで[編集の有効化] を選択すると雛形を作成してくれる  エンティティを受け取って処理を記述する  ビジネスロジック上の検証や計算処理を記述できる  名前付き更新メソッドを追加  クライアントでの操作をサーバーサイドでリプレイする。1つのエンティティに対して1回だ け  両方とも同じ  emp.ResetPassword();、Context.ResetPassword(emp);  呼び出し操作を追加  エンティティに関連付けない処理  ※ Invoke属性は不要、LoadやSubmitChangesする必要はない  その他  クライアントからサービスとして呼び出されないように、IgnoreAttribute 属性でマーク 10
  • 11.
    http://biki.jp.net/enterprisenet ドメインサービスのデータ  データの注釈と検証  DataTypeAttribute RangeAttribute  RegularExpressionAttribute  RequiredAttribute  StringLengthAttribute  CustomValidationAttribute  INotifyDataErrorInfo  同期および非同期の検証をサポートするメンバーを定義します  データの同時実行  既定では、RIA サービス が元のエンティティ全体を変更された値と共にデータ アクセス層 に渡して、データの同時実行を確認することはありません。その代わり、RIA サービス は、 RoundtripOriginalAttribute 属性でマークされたメンバーのみを格納し、渡します。  RIA サービス は、RoundtripOriginalAttribute 属性、ConcurrencyCheckAttribute 属性、または TimestampAttribute 属性でマークされたメンバーのみを格納  トランザクション  RIA サービス フレームワークによってトランザクションが自動的に作成されることはありま せんが、変更の送信時に明示的なトランザクションを追加できます 11
  • 12.
    http://biki.jp.net/enterprisenet ドメインサービスのデータ  コンポジットデータ(合成階層)  複数のエンティティを一つ塊にして処理できる仕組み 子孫エンティティのプロパティにCompositionAttribute 属性を付与  子孫エンティティを読み込むためにはIncludeAttribute 属性を適用し、クエリ メソッドに 子孫エンティティを含める必要がある  ドメインサービス  親エンティティまたは子孫エンティティのクエリ メソッドが許可される  親エンティティなしで読み込まれた子孫エンティティを変更することはできない(例外)  子孫エンティティで許可される操作  親エンティティで更新が許可されている場合、子孫エンティティでは更新、挿入、および削除が 許可される  親エンティティに名前付き更新メソッドがある場合、すべての子孫で更新が有効になっている 必要がある  親エンティティで挿入または削除が許可されている場合、子孫エンティティでは対応する操作 が再帰的に許可される  クライアント プロジェクト内での規則  子孫エンティティに変更が含まれる場合、変更の通知が親エンティティまで伝達される (HasChanges)  親エンティティを変更すると、その子孫エンティティすべて (変更されていない子孫を含む) が変 更セットに含まれる 12
  • 13.
    http://biki.jp.net/enterprisenet ドメインサービスのデータ  プレゼンテーションモデル  データアクセス層内の複数のエンティティからデータを集計するデータ モデル  データ アクセス層内のエンティティをクライアントに直接公開しないため、プレゼ ンテーション モデルのみを変更することで、データ アクセス層での変更に対応で きる  る  ドメインサービス  独自のプレゼンテーションモデルを作成してカスタムのドメインサービスを作成  プレゼンテーションモデルにも一意識別用のKey項目が必要  ドメインサービスはDomainServiceをベースにクエリメソッドを定義してデータ層を検索す る  更新処理を定義することも可能  プレゼンテーションモデルの各項目の変更内容を対応するエンティティに設定する  変更を送信した後、中間層ロジックまたはデータ ソースで設定されている値をクライアン トに渡すことができる  エンティティの値をプレゼンテーション モデルに再度マップするための Associate メソッド が用意されています 13
  • 14.
    http://biki.jp.net/enterprisenet ドメインサービスのデータ  継承  公開する派生型をKnownTypeAttribute 属性に含める必要がある  ドメイン サービスで公開した継承階層をそのままの構造で、クライアン ト プロジェクトに生成される。ルート クラスはEntity クラスから派生し、 各派生クラスが生成される  クエリメソッド、名前付き更新メソッドもインタフェースはサーバーの定義 と同じ  制限  継承はエンティティ型でのみサポートされています  ドメイン サービス操作の戻り値またはパラメーターでは、インターフェイス型がサ ポートされていません  継承階層内の型のセットは、コード生成時に認識されている必要があります  virtual 修飾子は許可されていますが、対応するエンティティ型がクライアントで 生成されるときは無視されます  ドメイン サービス操作に対するメソッドのオーバーロードは許可されていません  new (C#) キーワードと Shadows (Visual Basic) キーワードはエンティティ型では使 用できません 14
  • 15.
    http://biki.jp.net/enterprisenet ドメインサービスのデータ  関連付け  EntityFrameworkで生成している場合はAssociationAttributeを特 別指定する必要はない  Include属性をつけるとクライアント側にもプロパティが生成される  複合型(Complex Type)  Entity  クライアントではComplexObjectをベースになる 15
  • 16.
    http://biki.jp.net/enterprisenet 共有エンティティ  エンティティは、WCF RIAサービス アプリケーション内の 複数のドメイン サービス間で共有することができる  要は他のドメインサービスのエンティティを使えるということ  ドメインサービスを分けて開発できる  名前付更新はコンテキストを注意する  複数のコンテキストを利用している場合  それぞれのDomainServiceでエンティティを宣言した場合 はドメインサービスのContextでオブジェクトは別になる。 型は同じ  名前付更新は間違ったコンテキストで行うと例外で通知 してくれる 16
  • 17.
    http://biki.jp.net/enterprisenet クライアント・サーバー間の共有コード  共有ソース ファイル 共有の名前付け規則 (*.shared.cs または *.shared.vb)) を使 用してファイルを共有する場合は、ソース コード ファイルを共 有するための "プッシュ" モデルを実装します。共有ファイル は、コンパイル時に中間層プロジェクトからクライアント プロ ジェクトにアクティブにコピーされます  リンク ファイル  リンク ファイルの方法を使用する際は、ソース コード ファイル を共有するための "プル" モデルを実装します。クライアント プロジェクトにはファイルのコピーは含まれません。代わりに、 クライアント プロジェクトはサーバー プロジェクト内のファイル を参照するだけです 17
  • 18.
  • 19.
    http://biki.jp.net/enterprisenet レイアウト作成  XAMLで画面レイアウトを作成する  主なコントロール TextBox  Label(SDK)  ComboBox  CheckBox  DatePicker(SDK)  Button  DataGrid  DataForm(SDK) 19
  • 20.
    http://biki.jp.net/enterprisenet DataForm  単票編集するためのフォーム  コレクションを取り扱うためDataGridの単票版と考えてもいいかも 機能  データ移動  編集 (鉛筆)、新しいレコードの追加 (プラス記号)、およびレコードの削 除 (マイナス記号)  編集モード時にキャンセルとコミットができる  レイアウト  Display属性を利用してラベルタイトルやツールヒントを指定可能  検証  Required, StringLength, Range, RegularExpression, Customevalidationを指定して 検証ルールを指定できる  動作を換える仕組み  AutoCommit  AutoEdit  AutoGenerateFields  LabelPosition 20
  • 21.
    http://biki.jp.net/enterprisenet DomainContext と操作  WCFRIA サービス を使用して Silverlight プロジェクトと中間層プロジェクト をリンクすると、RIA サービス により、中間層で公開したエンティティおよび 操作に基づいて、クライアント アプリケーションのクライアント プロキシ ク ラスが生成されます  DomainContext から派生するクラス  ドメイン サービスと同じ名前空間を使用したドメイン コンテキスト クラスが生成されま す  既定では、ドメイン コンテキストの名前には、ドメイン サービスの名前付けに使用され る Service ではなく、Context が接尾辞として使用されます。たとえば、HRService という 名前のドメイン サービスには、HRContext という名前の対応するドメイン コンテキスト があります  DomainContext クラスでは、クエリ、送信、および呼び出しの各ドメイン操作がサポー トされています。各種操作には、進行中の非同期操作を表す、対応するクラスがあり ます。このようなクラスとしては、LoadOperation、SubmitOperation、および InvokeOperation があります。  エンティティ クラスとエンティティ プロキシ クラス  中間層内のエンティティ クラスと同じ名前および名前空間でプロキシ クラスが生成さ れます。  カスタム属性  共有コード 21
  • 22.
    http://biki.jp.net/enterprisenet DomainContext と操作  クエリ クエリ メソッドの名前は、ドメイン サービスのクエリ メソッドに Query という接尾辞を加えたもの。 EntityQuery オブジェクトを返します。  ドメイン コンテキストからのすべてのクエリが非同期的に実行されます。  クエリを実行するには、Load メソッドにパラメーターとして EntityQuery オブジェクトを渡す  LINQを利用するためにはSystem.ServiceModel.DomainServices.Clientの名前空間をインポート  利用可能なクエリ演算子  Where、OrderBy、ThenBy、Skip、Take  データの変更  エンティティを更新、挿入、および削除するためのメソッドはドメイン コンテキスト内に生成されません。代わり に、ドメイン コンテキストの SubmitChanges メソッドを使用すると、クライアントの変更内容がサーバにまとめて 送信され処理される  また、DomainContext クラスには、HasChanges プロパティと EntityContainer プロパティも用意されており、保留 中の変更を評価できます。  名前付き更新メソッド  ドメイン サービスのメソッドと同じ名前が生成  クライアント プロジェクトで、メソッドを呼び出しても、実際には SubmitChanges が呼び出されるまでこのメソッド は実行されません  エンティティのインスタンスを介しても呼び出すことができる  呼び出し操作  ドメイン サービスの各呼び出し操作に使用するメソッドが生成される  呼び出し操作はすぐに実行されます。SubmitChanges メソッドは呼び出しません 22
  • 23.
    http://biki.jp.net/enterprisenet クライアントでのエラー処理  WCF RIAサービス では、データ操作のコールバック メソッドを 指定し、そのコールバック メソッドでエラーをチェックすること で、エラーを処理します  データ読み込み時のエラー処理(いずれか)  コールバック メソッドのパラメーターを持つ Load メソッドを使用しま す。このコールバック メソッドでは、エラーを処理し、例外がスローさ れていないことを示す MarkErrorAsHandled メソッドを呼び出します。  データ送信時のエラー処理  SubmitChanges メソッドを使用して、コールバック メソッドをパラメー ターとして指定します。このコールバック メソッドでは、エラーを処理 し、例外がスローされていないことを示す MarkErrorAsHandled メ ソッドを呼び出します。  呼び出し操作によるエラー処理  呼び出し操作を呼び出すときにコールバック メソッドを含めます。こ のコールバック メソッドでは、エラーを処理し、例外がスローされて いないことを示す MarkErrorAsHandled メソッドを呼び出します。 23
  • 24.
    http://biki.jp.net/enterprisenet 生成されたコードのカスタマイズ  RIA サービスでは、生成されたコードに部分メソッドが用意さ れており、このメソッドを個別のコード ファイルに実装して、ク ライアント層コードをカスタマイズすることができます  部分メソッド  ドメイン コンテキスト クラス  OnCreated()  エンティティ クラス  OnCreated()  OnLoaded(boolean)  On[PropertyName]Changing  On[PropertyName]Changed  On[CustomMethodName]Invoking  On[CustomMethodName]Invoked 24
  • 25.