C#

MVVM + ヘキサゴナルアーキテクチャ + Entity Framework

WPFアプリケーションではMVVMのレイヤ化アーキテクチャがよく採用される。MVVMはGUIアーキテクチャの1つであり、 ビュー層 ビューモデル層 モデル層 の3層を考える、ビューにフォーカスした考え方である。したがって、例えばDDD(ドメイン駆動設計)における…

Visual StudioでProtocol Buffersを試す

Protocol Buffers使うなら.protoファイルでスキーマ定義してなんぼ*1ということでそうするが、protocで一々コンパイルとかはありえないのでVisual Studioに以下のカスタムツールを追加。 marketplace.visualstudio.com プロジェクトにNuGetで以下をインスト…

非同期イベントハンドラの完了をイベント発行元で待機する

C#

普通にEventHandlerを使ってイベントを実装すると、非同期のイベントハンドラを登録してもInvoke()で完了を待機できない。 Before Invoke After Invoke 1 EventHandlerはvoid型のdelegateなので待機できない。 全ての非同期のイベントハンドラの完了をイベン…

外からThread.Abort()されてもfinally句は最後まで実行される

C#

Reference Source見ていて面白いコードを見つけた。 https://referencesource.microsoft.com/#mscorlib/system/threading/timer.cs,562 // prevent ThreadAbort while updating state try { } finally { // 途中で止めたくない処理 } 試してみると確かにThre…

PrivateObjectExtensions

C#

github.com 作った。 ユニットテスト書いている時、実際の型と見えている型が違うとか同じとかを気にせずにprivateメンバにアクセスしたいことがよくある。Moqでモック作った時とか、基底クラスの型でオブジェクトを扱っている時とか。staticかどうかも気に…

MEFでImportしているメンバをモックに差し替える

C#

github.com C#でMEF使っているコードで、ユニットテストでMoqを使ってモックに差し替える話。 [Export] public class Test1 { [Import] private Test2 m_test2; public Test1() { } } [Export] public class Test2 { [Import] private Test1 m_test1; public…

List<T>の列挙方法による速度比較

C#

追記:以下ではStopwatchで実行時間を計測しておりあまり適切ではありませんが、BenchmarkDotNetで再計測したところおおむね同じ結果となり、傾向としては間違っていないと考え、書き直しはしていません。 List<T>に対してforeachのようなことをするには、いく</t>…