No more Death March

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

インターフェースを考える(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つありま…