Separated Interface and Plug-In

2018/08/27 WPF::Prism
Prismの肝となるパターン?
機能ごとに独立した部品(モジュール)を組み合わせてアプリケーションを作り上げることを可能にしているパターン。

Separated Interface

パッケージ間の結びつきを弱めるため、インターフェイスの定義と実装とは別の場所(パッケージ)で行う。
Martin Fowler

Prismでの利用

モジュールは全てIModuleインターフェイスを実装。IModuleはPrism本体で定義されている。

Plug-In

実行時に具体的な実装内容を引き出すことによって、実装方法に変更があった時でもコンパイルし直す必要が無いようにする。
Martin Fowler

Prismでの利用

Prismライブラリ内のDirectoryModuleCatalog.cs、ConfigurationModuleCatalog.cs、ModuleInitializer.csの3つが組み合わさってプラグインの機能を可能にしている。

Repository Pattern

2018/08/27 WPF::Prism
Repository:倉庫
これは説明不要なくらいよく出てくるパターン。
アプリケーションに必要なデータの取得を実際の取得方法(DB、JSON、XML等々)と分離する。
データの保存方法が変わった時のためというよりも、単体テスト時のダミーデータを返すテスト用リポジトリと簡単に切り替えるため。

Registry Pattern

2018/08/27 WPF::Prism
Registry(登記所、登録所)
こちらの説明を読むとMartin Fowlerの説明ほぼそのまま。
オブジェクトを一箇所(よく知られた場所)に登録しておき、他のオブジェクトから探しやすい、利用しやすいようにしておく。

Prismにおける利用

view typesをregionに紐づけるために利用。
IRegionViewRegistryインターフェイスとRegionViewRegistryクラスでレジストリを定義。

Model-View-ViewModel Pattern

2017/12/02 WPF::Prism
UIのデザインパターンの一つ。
他にはMVC(Model-View-Controller)、MVP(Model-View-Presenter)など。
ロジックからViewを切り離すことによって、ロジックのテストをしやすくする。

PrismにおけるMVVM

PrismはどのUIパターンとも共存できるよう設計されているけれど、WPFの特性を考えるとMVVMが一番お勧め。

MVVM Code Sample using the Prism Library 5.0 for WPF
上記の下記ファイルを参照
QuestionnaireView.xamlViewUI
QuestionnaireView.xaml.csViewQuestionnaireViewのpartial class。空。ここにロジックを書くとViewが絡むのでテストしづらい。XAMLだけでは表現しきれない複雑なアニメーションのロジック等を書く場合はここ。
QuestionnaireViewModel.csViewModelViewに必要なデータや状態を保持。BindableBaseを継承
Questionnaire.csModelデータの型

Observer Pattern

2017/11/08 WPF::Prism
GoF本にもある古典的なパターン。
あるオブジェクト(サブジェクト)が状態を変えた時、それに依存する全てのオブジェクト(オブザーバー)に自動的に状態の変更が通知され、通知を受け取った側が更新されるようにオブジェクト間に1対Nの依存関係を構築する。
通知する側と通知を受け取る側の結びつきをゆるくするためのパターン。
observer010.png

すみません、GoF本の改変改悪ですm(_ _)m。

Prismにおける利用

InteractionRequestはオブザーバーパターンの一種
InteractionRequestのソースはこちら
InteractionRequestの利用例はこちら
observer020.png

こんな感じでしょうか。自信ないです…。
OK キャンセル 確認 その他