2018-01-01から1年間の記事一覧

A Philosophy of Software Design の論点メモと感想

本記事は書籍「A Philosophy of Software Design」の論点をまとめたメモです。内容の詳細や結論までは含みません。論点について興味ある方は是非書籍をお読みください。英語ですが170ページほどで比較的読みやすい文体で書かれています。 A Philosophy of So…

配列に対してContains()を呼ぶとIEquatable.Equals()が使われない

C#

Enumerable.Contains<T>()の実装は以下のようになっていて、sourceがICollection<T>を実装していたらICollection<T>.Contains()が呼ばれ、実装していなかったらEqualityComparer<TSource>.Defaultで比較される。EqualityComparer<TSource>.Defaultはsourceの要素がIEquatable<T>を実装して</t></tsource></tsource></t></t></t>…

IEquatable完全に理解した

C#

qiita.com Advent Calendar初参加でした。 公式のガイドラインもEffective C#もなんか怪しいし分かりにくいのが悪いんです。完全に理解するための記事を書こうと思って書き出したら、やっぱり出てくる自分がきちんと理解できていない部分。文章にまとめるの…

「集約の境界と整合性の維持の仕方に悩んで2ヶ月ぐらい結論を出せていない話」の感想

kbigwheel.hateblo.jp こちらの記事の感想。 私の感覚では以下のような構造になって、整合性境界とか気にするような話ではないように思えてよくわからない。リポジトリに永続化に関わらないビジネスロジック持たせるのは変だし、説明を読む限り組織がユーザ…

WPF + gRPCでチャットサーバ・クライアントの実装

gRPCのお試し実装として、チャットサーバ・クライアントを作った。せっかくなのでヘキサゴナルアーキテクチャ。 github.com .protoファイルのサービス定義はこれ。すべてのRPCをクライアント側から要求するため、サービスはクライアント視点でのメソッドとし…

BenchmarkDotNetの概要

C#

github.com .NETアプリケーション用の標準ベンチマークパッケージ Stopwatchでログ吐くより信頼性高い JIT・GC・CPU動作クロックなどによる結果のばらつきを極力排除(たぶん) こんな感じ Method Mean Error StdDev Scaled Allocated Dictionary 145.376 ns…

非同期ストリームを扱うときはRxとIx-Asyncを使い分ける

C#

非同期ストリーム(=非同期シーケンス)を扱うならRx(System.Reactive)となりがちな昨今、Ix-Async(System.Interactive.Async)も道具箱に入れておいて適切に使い分けるのがいいのではという話。 Rxの解説において、IEnumerable<T>はpull型でIObservable<T>はp</t></t>…

ちょっとだけStatic Type Cachingのパフォーマンス確認

C#

CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する p.43からの部分のパフォーマンス比較を自分でやってみた。 Method Mean Error StdDev Allocated Dictionary 145.243 ns 3.6203 ns 0.2046 ns 0 B Cache 1.409 ns 0.1900 ns 0.0107 …

IDisposableの典型実装とコードスニペット

C#

(2020/5/10追記) 最新のVisual StudioではIDisposableの実装テンプレートをクイックアクションで生成できるようになっているので、コードスニペットを自前で用意する必要はありません。 stackoverflow.com この投稿が非常に分かりやすく参考になった。特に…

IEquatable<T>の典型実装とコードスニペット

C#

2018/12/15追記 こちらにまとめなおしたので参照してください。 qiita.com IEquatableの実装はややこしく、どうすればよいのかの情報が散乱していてよく混乱してしまうので、考慮もれなくきちんと実装できるようコードスニペット*1にまとめてある。ガイドラ…

簡単なGetHashCode()の実装例とパフォーマンス比較

C#

追記:Visual Studio 2017・ReSharperで自動生成できるので、もはや自動生成一択。 Generate C# Equals and GetHashCode Method Overrides - Visual Studio | Microsoft Docs stackoverflow.com stackoverflow.com IEquatableを実装した時にGetHashCode()を…

WPFアプリのMVVM構造の設計時に留意すべきこと

WPFアプリケーションでMVVMで実装するサンプルはネット上に数多くあるが、その多くは ウィンドウ 1つ(MainWindow.xaml) ビューモデルクラス 1つ(MainWindowViewModel.cs) モデルクラス 1つ(MainWindowModel.cs) といった簡単な構成になっており、こう…

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なので待機できない。 全ての非同期のイベントハンドラの完了をイベン…