読者です 読者をやめる 読者になる 読者になる

No more Death March

あるSEのチラシの裏 C# WPF

インターフェースを考える(13)コレクションとインターフェース

IActionやISpecificationなど、単一の要素に対するインターフェースでしたが、 実際にアプリケーションを組むとなると必ずコレクションに対する操作が必要になると思います。今回は拡張メソッドを使って、都度コーディングをしなくてもこれらインターフェー…

インターフェースを考える(12)ActionとActor

IActionインターフェースについて思いついたことがあるので書いてみます。まずIActionインターフェース namespace Nmdm.Actions { public interface IAction<TContext> { void Do(TContext context); } } 機能面だけで見ると一つの引数を受け取って戻り値の無いメソッ</tcontext>…

インターフェースを考える(11)IActionを手直し

ISpecification同様IActionを手直し+拡張メソッドを導入まずCompositeActionクラス namespace Nmdm.Actions { public sealed class CompositeAction<TContext> : IAction<TContext> { public CompositeAction(IAction<TContext> one, IAction<TContext> other) { this.One = one ?? new NullAction<TContext>()</tcontext></tcontext></tcontext></tcontext></tcontext>…

インターフェースを考える(10)ISpecificationのテスト

この記事では以下の記事で実装したクラスをテストしてみて、クライアントコードの具合を考えてみます。 記事の順序やらテストのタイミングがぐちゃぐちゃですが、チラシの裏ブログなのでご容赦を・・・nomoredeathmarch.hatenablog.comまず、最初のテストコ…

インターフェースを考える(9)インターフェースの組み合わせ

前回ISpecificationでAndやOrといった論理演算を拡張メソッドで簡単に記述出来るようにしましたが、 思うにこれって他の汎用的なインターフェースにすべて適用出来ますね。 以下前回の記事 nomoredeathmarch.hatenablog.comただ適用する際の注意点としては …

インターフェースを考える(8)判定処理と拡張メソッド

ISpecificationの組み合わせ方について これまで以下のような実装をしていました。 using System.Linq; using System.Collections.Generic; namespace Nmdm.Specifications { public sealed class AndSpecification<T> : ISpecification<T> { public AndSpecificat</t></t>…

インターフェースを考える(7)IPredicate

IPredicateの拡張について書きます。前回実装した記事は↓から nomoredeathmarch.hatenablog.comまずは前回のTestedTaskを少し手直し。 using System; using Nmdm.Tasks; namespace Nmdm.Predicates { public sealed class TestedTask : ITask { public Teste…

WPF パフォーマンス分析ツールを入れてみる。

WPFのチューニングが全然捗らないので分析ツールを導入してみる。 バインディングはほんと便利だと思うけど、こういうツールなしにチューニングするのはきついですね・・・とりあえずこの記事で目についたWPF Performance Suiteというのを入れてみよう。 WPF…

WPF 実行環境によっては画面がぼやける・・・

WPF

WPFではまったのでメモします。開発用マシンとは異なるOS、ハードで実行すると画面がぼやけてしまった。 アンチエイリアス処理の結果かなぁとは思ったけどぼやけかたが余りに酷い。なにかないかと試してみたのがこちら↓ FrameworkElement.UseLayoutRoundin…

C# Linq覚えなきゃなぁ

今更ですがIEnumerable.Countで痒いところに手が届いた感

インターフェースを考える(6)IEvent

以前書いたドメインイベントの実装について、 インターフェースの側から考える。nomoredeathmarch.hatenablog.com nomoredeathmarch.hatenablog.comまず作成したインターフェースについて復習まず、イベントを表すクラスのインターフェースIEvent namespace …

インターフェースを考える(5)IAction その2

前回に続きIActionについて考える。 IPredicateやITaskと同じように組み合わせ用にCompositeActionクラスを作る。 using System; using System.Collections.Generic; namespace Nmdm.Actions { public sealed class CompositeAction<TContext> : IAction<TContext> { public Comp</tcontext></tcontext>…

インターフェースを考える(4)IAction

C#実践開発手法よりIActionインターフェースです。 namespace Nmdm.Actions { public interface IAction<TContext> { void Do(TContext context); } } 単一の引数を受け取る戻り値の無いインターフェースで、 引数は型パラメータで指定出来る・・・と使いどころはどこ</tcontext>…

WPF IValueConverter小メモ

WPF

DateTime向けのコンバーターでDateTime以外の入力があったら例外投げていたけど、 どうもnullで飛んでくるタイミングがあって例外発生してたもよう。変換に失敗したら例外投げるより既定値で渡した方が良い?そのうち検証しよう。

インターフェースを考える(3)IPredicate

今回もC#実践開発手法から、IPredicateを題材にします。まずはインターフェース namespace Nmdm.Predicates { public interface IPredicate { bool Test(); } } ITaskインターフェース同様引数はありませんが、戻り値がbool型です。 戻り値をジェネリックに…

インターフェースを考える(2)ITaskインターフェース

C#実践開発手法で紹介されているもっとも単純なインターフェースITaskを作ってみます。 namespace Nmdm.Tasks { public interface ITask { void Do(); } } 引数も無く、戻り値もなく、最もシンプルなインターフェースですね。こういうインターフェースを作る…

インターフェースを考える(1)はじめに

オブジェクト指向プログラミングを勉強していると 実装ではなく抽象に依存する というフレーズを目にすることがあります。このカテゴリの記事では私自身の勉強のために、 とことんインターフェースを使ってみたらどうなるか、 実際にプログラミングしながら…

c# リファクタリング 小さい方の値が欲しい。

二つのint型から小さい方の値がほしい時。 public void Hoge(int one,int other) { int min; if (one < other) { min = one; } else { min = other; } } じゃなくて。MathクラスのMinメソッドを使おう。 public void Hoge(int one,int other) { int min; min…

C# 自作クラスの戻り値からnullを排除する。

C#

自作クラスのプロパティやメソッドでなんらかの値を返すならnullは返さないようにしたい。 そのクラス自体のnullチェックを他のクラスがするのはわかるとして、 クラスが公開する「何か」についてはそのクラスが責任を持つべき。string型のプロパティがある…

C# リファクタリング コレクションを変換

コレクションの内容を一定のルールに従って違う型に変換したい場合 public void Hoge() { var list = new List<object>(); list.Add(new object()); list.Add(new object()); list.Add(new object()); list.Add(new object()); list.Add(new object()); var list2 = </object>…

C# リファクタリング foreachで抽出

Listをぐるぐる回して条件に合致するものを別のインスタンスに入れている場合 public void Hoge() { var list = new List<String>(); list.Add("123"); list.Add("1234"); list.Add("12345"); list.Add("123456"); // 4文字以下のものをリストから抽出したい。 var l</string>…

C# リファクタリング コレクションを返すメソッド

なんらかの処理を行ってコレクションを返すようなメソッドがあったとして、 こんな具合にパラメータがnullだったら例外を投げ返すんだったら public IEnumerable<object> Hoge(object obj) { if (obj == null) throw new ArgumentNullException("obj"); // なにか処</object>…

C# リファクタリング 早期リターン

int型の引数が5以下だったらTrueを返すとして、 public bool Hoge(int value) { if(value < 5) { return true; }else{ return false; } } こうだったのを public bool Hoge(int value) { if (value < 5) return true; return false; } こうする。ソースコー…

オブジェクト指向もといプログラムを考える。

レガシープログラマの歴が長く、オブジェクト指向は独学、 何が良いプログラムで何が悪いプログラムなのかもやもやする・・・日々頭の中の考えがあっちいったりこっちいったりで切りがないので、 気が付いた時に文章に書いておいた方がいいかもしれない。今…

C# ドメインイベントの実装 つづき

C#

前回のエントリーの続きから nomoredeathmarch.hatenablog.com Publisherクラスのメソッドについて記述まずSubscribeメソッドから public static void Subscribe(ISubscriber subscriber) { try { Mutex.WaitOne(); if (subscriber == null) throw new Argum…

C# ドメインイベントの実装

C#

こちらの書籍の第8章で紹介されているパターン 通常のイベントハンドラを使わずにクラスをイベントに見立て、クラス間の結合を弱める。実践ドメイン駆動設計作者: ヴァーン・ヴァーノン出版社/メーカー: 翔泳社発売日: 2015/03/19メディア: Kindle版この商…

WPF 型'UserControl'はダイレクトコンテンツをサポートしていません。

WPF

クラスライブラリに(WPFの)UserControlを追加するとたまに怒られることがある。どうやら参照設定にSystem.Xaml(XAMLのパース用ライブラリ?)を追加していない状態でUserControlを追加すると再現するみたい。 System.Xamlを参照設定に追加してビルドする…

WPF Bind Modeの動きを確認

WPF

BindingクラスのBindingModeについて、改めて動きを確認してみました。まずビュー側

C# 拡張メソッドについてメモ

C#

拡張メソッド (C# プログラミング ガイド)拡張メソッドは別クラスで宣言した静的なメソッドをインスタンスメソッドのように記述出来るもの。まずは拡張メソッドでメソッドで追加するクラス namespace Nmdm { public sealed class Hoge { } } そして拡張メソ…

WPF ObservableCollectionのチューニング

WPF

WPFがもっさりしているのでいろいろ検索している中でなるほどーとなったもの、大事そうなのでメモします。Twelve Ways to Improve WPF Performance | PelebyteObservableCollectionでこんなようなことをしてたとして。 using System.ComponentModel; using S…

こちらの記事を参考に、ソースコードを貼ってみる。 ブログにソースコードを見やすく掲載する方法【C#】ブログにソースコードを見やすく掲載する方法【C#】 - 備忘録public class Hoge() { } なるほどこれは便利、Gistより楽ですね。

MVVMでDDD

「MVVMのModel=DDDのドメインモデルですね。」みたいな記述をどこかで見かけて。 はたしてそうか?と思った。 実装都合だけで考えるとDDDのUIの中にMVVMが全部入っている風にしちゃって良いと思う。 ViewModelはViewにバインドするメンバを公開するのが仕事…

WPF DataGridのSelectedItemプロパティにバインド

WPF

ちゃんと検証していないけど結構はまったので考察します。 DataGridで選択中の行をViewModelで把握するために、 SelectedItemプロパティにバインド。 が、DataGridが一行しかないとき、画面でクリックしてもなにしても、 ViewModel側のSetterに飛んでこない…

OracleSqlDeveloper

OracleDatabaseをインストールするとjdkフォルダの中に最初からsqldeveloperが入ってる。 今まで知りませんでした。

WPFスタイル⇒コントロールテンプレート⇒ユーザーコントロール ???

WPF

リソースディクショナリにTextBoxをターゲットにしたスタイルを記述、 コントロールテンプレートでユーザーコントロールを追加し、 ユーザーコントロールのプロパティにテンプレートバインディング。 これを画面からバインディングしようとしても上手くいか…

WPF依存関係プロパティのバインドモード初期値

WPF

依存関係プロパティをバインドする際にModeを省略した場合、 個々の依存関係プロパティ毎に選択されるModeの既定値は異なるとのこと。 ちなみにTextBoxはTwoWayです。 Modeを省略してTextBoxにバインドするのに慣れて、 ユーザーコントロールを自作して同じ…

WPF スタイルからビヘイビアでXamlParseException

WPF

外部のアセンブリからスタイル経由でビヘイビアを使おうとしたら例外 スタイルを書いてるリソースディクショナリでビヘイビアの名前空間しか書いてなかったのが原因、 アセンブリ名も記述すると成功。 リソースディクショナリとビヘイビアは同じアセンブリに…

WPF BlendのBehaiviorは

WPF BlendのBehaiviorクラスで作ったビヘイビアはそのままではStyleで使うことが出来ない。 少し仕組みを作ってやれば使えるみたいですが、 大して記述量も変わらないし自力で作った方が良いかも?

インスタンスを生成する処理のメリット

コンストラクタで直接オブジェクトを作るより new Hoge(1,"aaa"); 作るのが面倒でも生成処理に特化したクラスのメソッドで何をしているか表現した方がわかりやすい。 new HogeBuilder().ChangeId(1).ChangeName("aaa").Build(); なんでもかんでもFactoryやBu…

Stairwayパターンの説明の中で

C#実践開発手法 (マイクロソフト公式解説書) 作者: Gary McLean Hall,長沢智治,クイープ 出版社/メーカー: 日経BP社 発売日: 2015/06/04 メディア: 単行本 この商品を含むブログ (5件) を見る 第2章「依存関係と階層化」でStairwayパターンについて説明があ…

Entourageアンチパターン

「C#実践開発手法」2章でEntourageアンチパターンというのが紹介されていて、 これはインターフェースと実装を同じアセンブリ内に配置しないでね。っていう話みたいだけど、 5章でその例外について触れている。 ただし、このルールには例外が1つありま…

DDD-Specificationパターン

エリック・エヴァンスのドメイン駆動設計 作者: Eric Evans 出版社/メーカー: 翔泳社 発売日: 2013/11/20 メディア: Kindle版 この商品を含むブログ (6件) を見る DDDのSpecificationパターン(みたいなもの)を書いてみる。 まずは、ISpecificationインター…

シングルメソッドインターフェース

nomoredeathmarch.hatenablog.com ここで書いたインターフェースの話、 よく見たら「C#実践開発手法」第8章の終わりの方でもう一度触れられていた。 ここではIFunctionを特化したインターフェースとしてbool型を返す関数IPredicateを例に出しているけど、…

アダプティブコードの根っこの根っこ(2)

nomoredeathmarch.hatenablog.com 前回のエントリの続き、 定義済みデリゲートを最低限のインターフェースに置き換えたとこまで。 じゃあアプリケーション上のすべての処理をこれらのインターフェースだけで賄うべきだ、とはならないのだろう。 .net framewo…

アダプティブコードの根っこの根っこ

C#実践開発手法 (マイクロソフト公式解説書) 作者: Gary McLean Hall,長沢智治,クイープ 出版社/メーカー: 日経BP社 発売日: 2015/06/04 メディア: 単行本 この商品を含むブログ (5件) を見る 引き続き単一責務について考える。 プログラムって極限まで抽象…

アダプティブコードとデリゲート

C#実践開発手法 (マイクロソフト公式解説書) 作者: Gary McLean Hall,長沢智治,クイープ 出版社/メーカー: 日経BP社 発売日: 2015/06/04 メディア: 単行本 この商品を含むブログ (5件) を見る この本を読みながら考えを整理する。 第5章「単一責務の原則か…

良いプログラムの条件を考える。

・可能な限り不変 ・入れ替え可能 ・読みやすい ・シンプル ・色んな事に手を出しすぎない もう少し実装よりな観点 ・引数がより少ない、あっても一つ ・変数がより少ない、変数は読み取り専用 ・if文がない。あってもガード節一つ? ・switch文がない。stra…

newによるオブジェクトの生成

C#実践開発手法 (マイクロソフト公式解説書) 作者: Gary McLean Hall,長沢智治,クイープ 出版社/メーカー: 日経BP社 発売日: 2015/06/04 メディア: 単行本 この商品を含むブログ (5件) を見る この本の第2章で出てくる「newとコードの臭い」のメモ そもそも…

パラメータのオブジェクト化

クラス全体が不変だったり、不変な属性が交っている場合(DDDのエンティティとか) 例えばこんな感じ このままだと変更に弱いので、ビルダークラスと分ける。 メリット ・仕様変更があってもPersonクラスのコンストラクタを増やす必要がない。 ・チェック…