SlideShare a Scribd company logo
1 of 25
Download to read offline
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

More Related Content

Viewers also liked

Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみたJaeseop Jeong
 
ABC 2014 Winter 登壇資料
ABC 2014 Winter 登壇資料ABC 2014 Winter 登壇資料
ABC 2014 Winter 登壇資料Masayuki Ota
 
2011年マイクロソフト テクノロジー振り返り~開発編~
2011年マイクロソフト テクノロジー振り返り~開発編~2011年マイクロソフト テクノロジー振り返り~開発編~
2011年マイクロソフト テクノロジー振り返り~開発編~Takeshi Shinmura
 
Eslam El-Gameil Khiry CV9
Eslam El-Gameil Khiry CV9Eslam El-Gameil Khiry CV9
Eslam El-Gameil Khiry CV9Eslam EL-Gamil
 
Go azure おばかIoT シンポジウム
Go azure おばかIoT シンポジウムGo azure おばかIoT シンポジウム
Go azure おばかIoT シンポジウムKeiichi Hashimoto
 
本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版
本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版
本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版博宣 今村
 
AWS IoT を使う上での Next Step!!
AWS IoT を使う上での Next Step!!AWS IoT を使う上での Next Step!!
AWS IoT を使う上での Next Step!!Satoshi Nakada
 
Microsoft Azure EventHubで始めるIoT
Microsoft Azure EventHubで始めるIoTMicrosoft Azure EventHubで始めるIoT
Microsoft Azure EventHubで始めるIoTKeiichi Hashimoto
 
Azure Web Apps と Azure Mobile Apps
Azure Web Apps とAzure Mobile AppsAzure Web Apps とAzure Mobile Apps
Azure Web Apps と Azure Mobile Apps Masaki Yamamoto
 
[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...
[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...
[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...Naoki (Neo) SATO
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 

Viewers also liked (13)

Laravelを使ってみた
Laravelを使ってみたLaravelを使ってみた
Laravelを使ってみた
 
Azureでデータ解析
Azureでデータ解析Azureでデータ解析
Azureでデータ解析
 
ABC 2014 Winter 登壇資料
ABC 2014 Winter 登壇資料ABC 2014 Winter 登壇資料
ABC 2014 Winter 登壇資料
 
2011年マイクロソフト テクノロジー振り返り~開発編~
2011年マイクロソフト テクノロジー振り返り~開発編~2011年マイクロソフト テクノロジー振り返り~開発編~
2011年マイクロソフト テクノロジー振り返り~開発編~
 
Eslam El-Gameil Khiry CV9
Eslam El-Gameil Khiry CV9Eslam El-Gameil Khiry CV9
Eslam El-Gameil Khiry CV9
 
Go azure おばかIoT シンポジウム
Go azure おばかIoT シンポジウムGo azure おばかIoT シンポジウム
Go azure おばかIoT シンポジウム
 
本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版
本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版
本気で語り合おうオープンソースのドローン開発とIoTの事(2017 01-10) 公開版
 
AWS IoT を使う上での Next Step!!
AWS IoT を使う上での Next Step!!AWS IoT を使う上での Next Step!!
AWS IoT を使う上での Next Step!!
 
Microsoft Azure EventHubで始めるIoT
Microsoft Azure EventHubで始めるIoTMicrosoft Azure EventHubで始めるIoT
Microsoft Azure EventHubで始めるIoT
 
IoTのIを考えてみる話
IoTのIを考えてみる話IoTのIを考えてみる話
IoTのIを考えてみる話
 
Azure Web Apps と Azure Mobile Apps
Azure Web Apps とAzure Mobile AppsAzure Web Apps とAzure Mobile Apps
Azure Web Apps と Azure Mobile Apps
 
[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...
[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...
[Developers Festa Sapporo 2016] Microsoft Azureでのアプリ開発 ~コンテナー、マイクロサービス、サーバーレス...
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 

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

公開用 SC006 クラウドインフラの作り方
公開用 SC006 クラウドインフラの作り方公開用 SC006 クラウドインフラの作り方
公開用 SC006 クラウドインフラの作り方Takefumi Kakimoto
 
今後のビジネス モデルに対応する Azure プラットフォーム技術の活用
今後のビジネス モデルに対応する Azure プラットフォーム技術の活用今後のビジネス モデルに対応する Azure プラットフォーム技術の活用
今後のビジネス モデルに対応する Azure プラットフォーム技術の活用Kazuyuki Nomura
 
Kansai Azure Azure Overview & Update 20140926
Kansai Azure Azure Overview & Update 20140926Kansai Azure Azure Overview & Update 20140926
Kansai Azure Azure Overview & Update 20140926Ayako Omori
 
20170902 kixs azure&azure stack
20170902 kixs azure&azure stack20170902 kixs azure&azure stack
20170902 kixs azure&azure stackOsamu Takazoe
 
[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDev を使...
[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDevを使...[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDevを使...
[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDev を使...Tatsuhiko Tanaka
 
20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方Amazon Web Services Japan
 
Design Pattern MicroServices Architecture in Japanese
Design Pattern MicroServices Architecture in JapaneseDesign Pattern MicroServices Architecture in Japanese
Design Pattern MicroServices Architecture in JapaneseLei Xu
 
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Akira Inoue
 
API Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップAPI Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップCA Technologies
 
セキュリティ設計の頻出論点
セキュリティ設計の頻出論点セキュリティ設計の頻出論点
セキュリティ設計の頻出論点Tomohiro Nakashima
 
DevOps with Dynatrace
DevOps with DynatraceDevOps with Dynatrace
DevOps with DynatraceHarry Hiyoshi
 
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発Naoki (Neo) SATO
 
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送Google Cloud Platform - Japan
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨Amazon Web Services Japan
 
Smart Store サーバーレスアーキテクチャ編
Smart Store サーバーレスアーキテクチャ編Smart Store サーバーレスアーキテクチャ編
Smart Store サーバーレスアーキテクチャ編Microsoft Azure Japan
 
20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architectureIssei Hiraoka
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 

Similar to エンタープライズ.Net RIAサービス (20)

公開用 SC006 クラウドインフラの作り方
公開用 SC006 クラウドインフラの作り方公開用 SC006 クラウドインフラの作り方
公開用 SC006 クラウドインフラの作り方
 
今後のビジネス モデルに対応する Azure プラットフォーム技術の活用
今後のビジネス モデルに対応する Azure プラットフォーム技術の活用今後のビジネス モデルに対応する Azure プラットフォーム技術の活用
今後のビジネス モデルに対応する Azure プラットフォーム技術の活用
 
Kansai Azure Azure Overview & Update 20140926
Kansai Azure Azure Overview & Update 20140926Kansai Azure Azure Overview & Update 20140926
Kansai Azure Azure Overview & Update 20140926
 
20170902 kixs azure&azure stack
20170902 kixs azure&azure stack20170902 kixs azure&azure stack
20170902 kixs azure&azure stack
 
Microsoft Share Point on AWS
Microsoft Share Point on AWSMicrosoft Share Point on AWS
Microsoft Share Point on AWS
 
[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDev を使...
[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDevを使...[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDevを使...
[1998/05/18] Visual C++ Developers Conference / Visual C++とVisual InterDev を使...
 
20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方20200708サーバーレスでのAPI管理の考え方
20200708サーバーレスでのAPI管理の考え方
 
Design Pattern MicroServices Architecture in Japanese
Design Pattern MicroServices Architecture in JapaneseDesign Pattern MicroServices Architecture in Japanese
Design Pattern MicroServices Architecture in Japanese
 
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
Visual Studio 2012 で実現する HTML5 & マルチ デバイス時代の Web 開発
 
API Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップAPI Academy:マイクロサービス化へのファーストステップ
API Academy:マイクロサービス化へのファーストステップ
 
セキュリティ設計の頻出論点
セキュリティ設計の頻出論点セキュリティ設計の頻出論点
セキュリティ設計の頻出論点
 
DevOps with Dynatrace
DevOps with DynatraceDevOps with Dynatrace
DevOps with Dynatrace
 
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
[Microsoft Tech Summit] Linux/Java にも対応! Azure Service Fabric を使ったマイクロサービス開発
 
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
[Cloud OnAir] Talks by DevRel Vol. 1 インフラストラクチャ 2020年7月30日 放送
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
 
Smart Store サーバーレスアーキテクチャ編
Smart Store サーバーレスアーキテクチャ編Smart Store サーバーレスアーキテクチャ編
Smart Store サーバーレスアーキテクチャ編
 
20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
20100218
2010021820100218
20100218
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 

More from Akihiro Ehara

Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackAkihiro Ehara
 
Share point開発 勤怠管理
Share point開発 勤怠管理Share point開発 勤怠管理
Share point開発 勤怠管理Akihiro Ehara
 
Share point開発 ファイル受信
Share point開発 ファイル受信Share point開発 ファイル受信
Share point開発 ファイル受信Akihiro Ehara
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターAkihiro Ehara
 
Google アナリティクスで SharePointの利用状況を確認する
Google アナリティクスでSharePointの利用状況を確認するGoogle アナリティクスでSharePointの利用状況を確認する
Google アナリティクスで SharePointの利用状況を確認するAkihiro Ehara
 
SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携Akihiro Ehara
 
SharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドインSharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドインAkihiro Ehara
 
エンタープライズ.Net light switch
エンタープライズ.Net light switchエンタープライズ.Net light switch
エンタープライズ.Net light switchAkihiro Ehara
 
エンタープライズ.Net DataSet
エンタープライズ.Net DataSetエンタープライズ.Net DataSet
エンタープライズ.Net DataSetAkihiro Ehara
 
エンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスエンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスAkihiro Ehara
 
エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編Akihiro Ehara
 
エンタープライズ.Net アーキテクチャ設計編
エンタープライズ.Net アーキテクチャ設計編エンタープライズ.Net アーキテクチャ設計編
エンタープライズ.Net アーキテクチャ設計編Akihiro Ehara
 
エンタープライズ.Net 分析編
エンタープライズ.Net 分析編エンタープライズ.Net 分析編
エンタープライズ.Net 分析編Akihiro Ehara
 

More from Akihiro Ehara (14)

Visual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPackVisual Studio TypeScript npm WebPack
Visual Studio TypeScript npm WebPack
 
Share point開発 勤怠管理
Share point開発 勤怠管理Share point開発 勤怠管理
Share point開発 勤怠管理
 
Share point開発 ファイル受信
Share point開発 ファイル受信Share point開発 ファイル受信
Share point開発 ファイル受信
 
SharePoint Onlineアクセスモニター
SharePoint OnlineアクセスモニターSharePoint Onlineアクセスモニター
SharePoint Onlineアクセスモニター
 
Google アナリティクスで SharePointの利用状況を確認する
Google アナリティクスでSharePointの利用状況を確認するGoogle アナリティクスでSharePointの利用状況を確認する
Google アナリティクスで SharePointの利用状況を確認する
 
SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携SharePointアドイン開発 SAPデータ連携
SharePointアドイン開発 SAPデータ連携
 
SharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドインSharePointアドイン開発 Line風Chat アドイン
SharePointアドイン開発 Line風Chat アドイン
 
Cloud storage light
Cloud storage lightCloud storage light
Cloud storage light
 
エンタープライズ.Net light switch
エンタープライズ.Net light switchエンタープライズ.Net light switch
エンタープライズ.Net light switch
 
エンタープライズ.Net DataSet
エンタープライズ.Net DataSetエンタープライズ.Net DataSet
エンタープライズ.Net DataSet
 
エンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービスエンタープライズ.Net RIAサービス
エンタープライズ.Net RIAサービス
 
エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編エンタープライズ.Net 詳細設計編
エンタープライズ.Net 詳細設計編
 
エンタープライズ.Net アーキテクチャ設計編
エンタープライズ.Net アーキテクチャ設計編エンタープライズ.Net アーキテクチャ設計編
エンタープライズ.Net アーキテクチャ設計編
 
エンタープライズ.Net 分析編
エンタープライズ.Net 分析編エンタープライズ.Net 分析編
エンタープライズ.Net 分析編
 

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

  • 1. http://biki.jp.net/enterprisenet エンタープライズ.NET WCF RIA Service SilverlightとWCF RIA 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
  • 5. http://biki.jp.net/enterprisenet ドメインサービス  ドメイン サービスは、WCF RIA サービス アプリケーション のビジネス ロジックをカプセル化した 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 ドメインサービスのデータ  関連付け  Entity Frameworkで生成している場合は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
  • 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 と操作  WCF RIA サービス を使用して 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