最近、家でVisual Studioを開いてなかった。ということでなまってるのでリハビリをしてみようと思う。
お題は、かなり前に作ったRSS Readerの出来損ないをComposite Application Guidance for WPFで作ってみようと思う。
見た目のスタイルは、前のプロジェクトからさっくり頂いて後で適用する(予定)。まずは、プロジェクトの雛形から作ってみようと思う。
作るときのポリシーは、以下の通り。
- 各層の間にインターフェースを入れて、テストしやすいように作ってみよう
- PresentationModelパターンってやつをやってみる?
- Module間の連携機能とかやってみる?
ということで、さくっと雛形を作ってみた。まだ、見た目は何もいじってないので真っ白ウィンドウが出るだけ。
ポイントになるのはRSSReaderBootstrapperの所になると思う。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Composite.UnityExtensions;
using Microsoft.Practices.Composite.Modularity;
using System.Windows;
namespace CompositeRSSReader
{
public class RSSReaderBootstrapper : UnityBootstrapper
{
protected override System.Windows.DependencyObject CreateShell()
{
// ShellPresentationModelのインスタンスを生成する
// コンストラクタインジェクションでShellが登録される
var model = Container.Resolve<ShellPresentationModel>();
// Shellを表示する
model.Shell.ShowView();
// んで、返す
return model.Shell as DependencyObject;
}
protected override void ConfigureContainer()
{
// コンテナにShellを登録
Container.RegisterType<IShell, Shell>();
}
protected override Microsoft.Practices.Composite.Modularity.IModuleEnumerator GetModuleEnumerator()
{
// モジュールはまだ無い
return new StaticModuleEnumerator();
}
}
}
ConfigureContainerメソッドでShellをUnityContainerに登録しておいて、CreateShellメソッドで、ShellPresentationModelを作成して、そこ経由でShellを操作している。
何のメリットがあるかって?
わからん!
ということで、PresentationModelっぽくクラスだけ作ってみたけど、イマイチメリットがわからない。
今後何かがあったときにありがたみを感じれるのだろうか。なぞは深まるばかり。
因みに、ここまでのプロジェクトは下からDL出来ます。