2018-01-01から1年間の記事一覧
本記事は書籍「A Philosophy of Software Design」の論点をまとめたメモです。内容の詳細や結論までは含みません。論点について興味ある方は是非書籍をお読みください。英語ですが170ページほどで比較的読みやすい文体で書かれています。 A Philosophy of So…
Enumerable.Contains<T>()の実装は以下のようになっていて、sourceがICollection<T>を実装していたらICollection<T>.Contains()が呼ばれ、実装していなかったらEqualityComparer<TSource>.Defaultで比較される。EqualityComparer<TSource>.Defaultはsourceの要素がIEquatable<T>を実装して</t></tsource></tsource></t></t></t>…
qiita.com Advent Calendar初参加でした。 公式のガイドラインもEffective C#もなんか怪しいし分かりにくいのが悪いんです。完全に理解するための記事を書こうと思って書き出したら、やっぱり出てくる自分がきちんと理解できていない部分。文章にまとめるの…
kbigwheel.hateblo.jp こちらの記事の感想。 私の感覚では以下のような構造になって、整合性境界とか気にするような話ではないように思えてよくわからない。リポジトリに永続化に関わらないビジネスロジック持たせるのは変だし、説明を読む限り組織がユーザ…
gRPCのお試し実装として、チャットサーバ・クライアントを作った。せっかくなのでヘキサゴナルアーキテクチャ。 github.com .protoファイルのサービス定義はこれ。すべてのRPCをクライアント側から要求するため、サービスはクライアント視点でのメソッドとし…
github.com .NETアプリケーション用の標準ベンチマークパッケージ Stopwatchでログ吐くより信頼性高い JIT・GC・CPU動作クロックなどによる結果のばらつきを極力排除(たぶん) こんな感じ Method Mean Error StdDev Scaled Allocated Dictionary 145.376 ns…
非同期ストリーム(=非同期シーケンス)を扱うならRx(System.Reactive)となりがちな昨今、Ix-Async(System.Interactive.Async)も道具箱に入れておいて適切に使い分けるのがいいのではという話。 Rxの解説において、IEnumerable<T>はpull型でIObservable<T>はp</t></t>…
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 …
(2020/5/10追記) 最新のVisual StudioではIDisposableの実装テンプレートをクイックアクションで生成できるようになっているので、コードスニペットを自前で用意する必要はありません。 stackoverflow.com この投稿が非常に分かりやすく参考になった。特に…
2018/12/15追記 こちらにまとめなおしたので参照してください。 qiita.com IEquatableの実装はややこしく、どうすればよいのかの情報が散乱していてよく混乱してしまうので、考慮もれなくきちんと実装できるようコードスニペット*1にまとめてある。ガイドラ…
追記:Visual Studio 2017・ReSharperで自動生成できるので、もはや自動生成一択。 Generate C# Equals and GetHashCode Method Overrides - Visual Studio | Microsoft Docs stackoverflow.com stackoverflow.com IEquatableを実装した時にGetHashCode()を…
WPFアプリケーションでMVVMで実装するサンプルはネット上に数多くあるが、その多くは ウィンドウ 1つ(MainWindow.xaml) ビューモデルクラス 1つ(MainWindowViewModel.cs) モデルクラス 1つ(MainWindowModel.cs) といった簡単な構成になっており、こう…
WPFアプリケーションではMVVMのレイヤ化アーキテクチャがよく採用される。MVVMはGUIアーキテクチャの1つであり、 ビュー層 ビューモデル層 モデル層 の3層を考える、ビューにフォーカスした考え方である。したがって、例えばDDD(ドメイン駆動設計)における…
Protocol Buffers使うなら.protoファイルでスキーマ定義してなんぼ*1ということでそうするが、protocで一々コンパイルとかはありえないのでVisual Studioに以下のカスタムツールを追加。 marketplace.visualstudio.com プロジェクトにNuGetで以下をインスト…
普通にEventHandlerを使ってイベントを実装すると、非同期のイベントハンドラを登録してもInvoke()で完了を待機できない。 Before Invoke After Invoke 1 EventHandlerはvoid型のdelegateなので待機できない。 全ての非同期のイベントハンドラの完了をイベン…