More Related Content
PDF
ActionScript API for Amazon Web Services (AWS) PDF
ActionScript API for Amazon Web Services (AWS) クラスメソッド株式会社 横田 聡 PDF
PPTX
マルチリージョン・マルチアカウント対応の柔軟な構築ツールを作ってみた PDF
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜 PDF
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介 PPTX
PDF
Application Architecture for Enterprise Win Store Apps with DDD Pattern Similar to エンタープライズ.Net RIAサービス
PPTX
PPT
PDF
Bar VSUG 04 Takashi Shinmura PDC09 PDF
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること PPTX
API Academy:マイクロサービス化へのファーストステップ PPTX
PDF
PPT
PPTX
PDF
PPTX
PPT
Emerging IT Services Trend (In Japanese) PDF
PPT
PDF
Google Compute EngineとGAE Pipeline API PDF
Google Compute EngineとPipe API PDF
Amazon Web Servicesブース:UI×API×AWS 横田 聡 PDF
PPTX
PPTX
More from Akihiro Ehara
PDF
Visual Studio TypeScript npm WebPack PDF
PDF
PDF
SharePoint Onlineアクセスモニター PDF
Google アナリティクスでSharePointの利用状況を確認する PDF
SharePointアドイン開発 SAPデータ連携 PDF
SharePointアドイン開発 Line風Chat アドイン PDF
PDF
エンタープライズ.Net light switch PDF
PDF
PDF
PDF
PDF
エンタープライズ.Net RIAサービス
- 1.
- 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.
- 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.
- 16.
http://biki.jp.net/enterprisenet
共有エンティティ
エンティティは、WCF RIAサービス アプリケーション内の
複数のドメイン サービス間で共有することができる
要は他のドメインサービスのエンティティを使えるということ
ドメインサービスを分けて開発できる
名前付更新はコンテキストを注意する
複数のコンテキストを利用している場合
それぞれのDomainServiceでエンティティを宣言した場合
はドメインサービスのContextでオブジェクトは別になる。
型は同じ
名前付更新は間違ったコンテキストで行うと例外で通知
してくれる
16
- 17.
http://biki.jp.net/enterprisenet
クライアント・サーバー間の共有コード
共有ソース ファイル
共有の名前付け規則 (*.shared.cs または *.shared.vb)) を使
用してファイルを共有する場合は、ソース コード ファイルを共
有するための "プッシュ" モデルを実装します。共有ファイル
は、コンパイル時に中間層プロジェクトからクライアント プロ
ジェクトにアクティブにコピーされます
リンク ファイル
リンク ファイルの方法を使用する際は、ソース コード ファイル
を共有するための "プル" モデルを実装します。クライアント
プロジェクトにはファイルのコピーは含まれません。代わりに、
クライアント プロジェクトはサーバー プロジェクト内のファイル
を参照するだけです
17
- 18.
- 19.
- 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.