the sea of fertility

C#er blog - http://ugaya40.net より移転。今度のブログは落ちない

Livet 1.3(VS2015対応リリース) & Livet2について

 

f:id:m_onoue:20141224062742p:plain

ProjectHome : http://ugaya40.hateblo.jp/entry/livet

SourceCode : https://github.com/ugaya40/Livet

Livet 1.3リリース

Livet1.3をVSギャラリー/Nugetともにリリースしました。

www.nuget.org

visualstudiogallery.msdn.microsoft.com

 

VS2015対応がメインですが、VSギャラリーとNugetで公開しているアセンブリに含まれなかったかなり長い間放置していた数々のバグ修正を含んでいます。

破壊的変更があります。

InteractionMessageAction.InvokeActionOnlyWhenWindowIsActiveのデフォルト値が、falseからtrueになりました。混乱が多く発生していたのを見かねたからです。

github.com

最後のLivet1.x系リリース

Livet1.x系のリリースはこれで最後にしようかと思っています。LivetのインストーラはいまだにVS2010をサポートしていますし、VBにも対応しています。本質的ではない保守コストが高すぎます。

また、.NET4系のコードベースはもう今の時代に沿いません。限界を感じます。

 

2011年に開発を初めてから、記録が残っていない部分もありますが、少なくともVS2013になってからでもVSギャラリーとnugetだけで13000ダウンロードはしていただいています。開発のどの段階でも様々なフィードバックをいただきました。技術者としてもっとも成長できたのはMVVMの追求とLivetの開発に充てた時間だと思っております。ありがとうございました、感謝してもしきれません。

提督業も忙しい!や Krileをはじめとして多くのアプリで採用していただきました。特に前述の二つのアプリケーションには巨大なバイナリ実績を作っていただいたので感謝しております。

今後はLivet2の開発をしていこうと思っています。

続きを読む

StatefulModelについて

StatefulModelとは?

StatefulModelはModel-View-Whateverにおける、いわゆる"fatなModel"を構築するためのクラス群です。現在の機能はStetefulModelのための変更通知群とイベントリスナー系がメインになります。github.com

変更通知コレクション群では、スレッドセーフな変更通知コレクションやソート済の変更通知コレクション、または特定のSynchronizationContextにバインドした変更通知コレクションと、それぞれの同期変換機能を提供しています。組み合わせることによって、例えば「スレッドセーフに値を追加できるソート済のUIスレッド上で結果が見える変更通知コレクション」なども簡単に作成できます。ReadOnlyWrapperも用意してあります。

MIT LicenseでNugetにて提供しています。

PCLとして作成していて、サポートするプラットフォームは以下の通りになっています。

なお、私の提供するLivetの一部機能はStatefulModelで置き換えられる予定です。

続きを読む

RxFlowについて


ugaya40/RxFlow · GitHub

RxFlowとは?

RxFlowはRx( Reactive Extensions )を用いてフロー制御を行うためのライブラリです。
現在の業務でネットワークアクセスを含む分岐点の多いバッチ処理を書いていて面倒になって作りました。
もともとはライブラリと言えるくらい大きくなる予定だったんですが、整理されていくうちにだんだんライブラリとして独立させる意味あるのか?ってサイズになってきました。でも今後拡充・・のつもりでライブラリとして公開しておきます。

なぜ Reactive Extension を使いたいのか?

ネットワークアクセスを含むリトライをこんなにシンプルに書ける環境他にあります?

IObservable<string> GetApiResultText(Func<WebRequest> webRequestFactory)
{
    return Observable.Defer(() => webRequestFactory().DownloadStringAsObservable())
        .Retry(3, TimeSpan.FromSeconds(3));
}

このメソッドはリクエストを生成するファクトリを放り込むと非同期でネットワークアクセスを行い、結果を文字列として取得し、エラーの際は3秒おきに計3回までリトライするものです。
意図即コード、僕にとってはこれがRxの一番の魅力です。
昔OptionとEitherを定義してC#で勝手if文無しバッチを書いた時もやっぱりRxの柔軟な機能が欲しくなってRxに寄せるはめになったんですよね。

また継承の多態を駆使したコードと組み合わせるとメソッドチェインによるフローの一覧性ってものすごく強力です。

そしたらもうこれはRxです、Rx。というわけでRxです。

RxFlow

シンプルなフロー制御機構です。RxのConnectableObservableと異なる形でシーケンスを分配します。

  • 複数のシーケンスから同一のシーケンスに分岐
  • 一つのシーケンスから複数のシーケンスへ分岐
  • 複数のシーケンスから複数のシーケンスへ分岐
  • 分岐から分岐へ
  • 分岐の使いまわし

のような事が簡単にできるようになります。
Rx-Mainにしか依存していないので、Rx-Mainが使える環境では使えます。ちゃんとNugetもあります。

続きを読む

「ソフトウェアアーキテクチャとは?」 - MVP Community Camp 2015 東京会場で話してきました

「ソフトウェアアーキテクチャとは?」というテーマでMVP Community Camp 2015 でお話してきました。

Architectureの原義に戻ったお話をしてきました。この話聞いても、MVC系各種とかDomainModelとかTransactionScriptとか理解していないと多分何にもならないと思います。


Software Architectureとは?

 

 

MVVMのModelにまつわる誤解

こちらに移転してきて初めての記事です。

最近たまに話題になるので書いておきます。MVVMのModelについて誤解されやすい部分のお話です。最近よく議論してるasync/awaitの話とは関係がありません。なおこの話は以下のスライドを理解している事が前提となります。

共有したい理解(ゴール)

  • ViewModelはModelの影
  • ModelについてViewModelが行うことは、イベントに対する反応と戻り値のないメソッドの呼び出ししかない事

これについての理解を共有できるよう説明していきます。

続きを読む

WPF/Silverlight/Windows Phone共通WeakEvent機構

この記事は2011/12/12に旧ブログ(http://ugaya40.net)に投稿した記事を私の旧ブログ閉鎖に伴い移管したものです。

注)十中八九ストアアプリでも動きます(2014/12/25追記)

この記事はSilverlight Advent Calender 2011の12/11分の記事です。前日は@neueccさんの.NETの標準シリアライザ(XML/JSON)の使い分けまとめでした。

WeakEvent機構というものはXAML系技術で必要なものです。しかし開発者がWeakEventを用意する仕組みは.NET4(WPF)でしか用意されていません。この記事ではWeakEventとは何か?どういうときに必要なのか?どうやって動くのか?を簡単に説明し、そしてWPF/SIlverlight/Windows Phone7で共通で使えるWeakEvent機構の実装を紹介します。

続きを読む