2017-03-01から1ヶ月間の記事一覧
public DateTime MonthFirstDate(DateTime value) { return new DateTime(value.Year, value.Month, 1); } DateTimeのコンストラクタの日にち部分に1を渡す。
public DateTime ToMonthLastDate(DateTime value) { return new DateTime(value.Year, value.Month, DateTime.DaysInMonth(value.Year, value.Month)); } 年と月はそのまま、日にちだけDateTimeクラスのDaysInMonthメソッドに年と月を渡してやる。 VB6の時…
C#実践開発手法のシングルメソッドインターフェースで色々書いてきたけども、 途中途中浮かんだ考えをだぁーっと箇条書きにしてみる。C#実践開発手法 デザインパターンとSOLID原則によるアジャイルなコーディング作者: ゲイリーマクリーンホール出版社/メ…
IActionやISpecificationなど、単一の要素に対するインターフェースでしたが、 実際にアプリケーションを組むとなると必ずコレクションに対する操作が必要になると思います。今回は拡張メソッドを使って、都度コーディングをしなくてもこれらインターフェー…
IActionインターフェースについて思いついたことがあるので書いてみます。まずIActionインターフェース namespace Nmdm.Actions { public interface IAction<TContext> { void Do(TContext context); } } 機能面だけで見ると一つの引数を受け取って戻り値の無いメソッ</tcontext>…
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>…
この記事では以下の記事で実装したクラスをテストしてみて、クライアントコードの具合を考えてみます。 記事の順序やらテストのタイミングがぐちゃぐちゃですが、チラシの裏ブログなのでご容赦を・・・nomoredeathmarch.hatenablog.comまず、最初のテストコ…
前回ISpecificationでAndやOrといった論理演算を拡張メソッドで簡単に記述出来るようにしましたが、 思うにこれって他の汎用的なインターフェースにすべて適用出来ますね。 以下前回の記事 nomoredeathmarch.hatenablog.comただ適用する際の注意点としては …
ISpecificationの組み合わせ方について これまで以下のような実装をしていました。 using System.Linq; using System.Collections.Generic; namespace Nmdm.Specifications { public sealed class AndSpecification<T> : ISpecification<T> { public AndSpecificat</t></t>…
IPredicateの拡張について書きます。前回実装した記事は↓から nomoredeathmarch.hatenablog.comまずは前回のTestedTaskを少し手直し。 using System; using Nmdm.Tasks; namespace Nmdm.Predicates { public sealed class TestedTask : ITask { public Teste…
WPFのチューニングが全然捗らないので分析ツールを導入してみる。 バインディングはほんと便利だと思うけど、こういうツールなしにチューニングするのはきついですね・・・とりあえずこの記事で目についたWPF Performance Suiteというのを入れてみよう。 WPF…
WPFではまったのでメモします。開発用マシンとは異なるOS、ハードで実行すると画面がぼやけてしまった。 アンチエイリアス処理の結果かなぁとは思ったけどぼやけかたが余りに酷い。なにかないかと試してみたのがこちら↓ FrameworkElement.UseLayoutRoundin…
今更ですがIEnumerable.Countで痒いところに手が届いた感
以前書いたドメインイベントの実装について、 インターフェースの側から考える。nomoredeathmarch.hatenablog.com nomoredeathmarch.hatenablog.comまず作成したインターフェースについて復習まず、イベントを表すクラスのインターフェースIEvent namespace …
前回に続きIActionについて考える。 IPredicateやITaskと同じように組み合わせ用にCompositeActionクラスを作る。 using System; using System.Collections.Generic; namespace Nmdm.Actions { public sealed class CompositeAction<TContext> : IAction<TContext> { public Comp</tcontext></tcontext>…
C#実践開発手法よりIActionインターフェースです。 namespace Nmdm.Actions { public interface IAction<TContext> { void Do(TContext context); } } 単一の引数を受け取る戻り値の無いインターフェースで、 引数は型パラメータで指定出来る・・・と使いどころはどこ</tcontext>…
DateTime向けのコンバーターでDateTime以外の入力があったら例外投げていたけど、 どうもnullで飛んでくるタイミングがあって例外発生してたもよう。変換に失敗したら例外投げるより既定値で渡した方が良い?そのうち検証しよう。
今回もC#実践開発手法から、IPredicateを題材にします。まずはインターフェース namespace Nmdm.Predicates { public interface IPredicate { bool Test(); } } ITaskインターフェース同様引数はありませんが、戻り値がbool型です。 戻り値をジェネリックに…
C#実践開発手法で紹介されているもっとも単純なインターフェースITaskを作ってみます。 namespace Nmdm.Tasks { public interface ITask { void Do(); } } 引数も無く、戻り値もなく、最もシンプルなインターフェースですね。こういうインターフェースを作る…
オブジェクト指向プログラミングを勉強していると 実装ではなく抽象に依存する というフレーズを目にすることがあります。このカテゴリの記事では私自身の勉強のために、 とことんインターフェースを使ってみたらどうなるか、 実際にプログラミングしながら…
二つの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…
自作クラスのプロパティやメソッドでなんらかの値を返すならnullは返さないようにしたい。 そのクラス自体のnullチェックを他のクラスがするのはわかるとして、 クラスが公開する「何か」についてはそのクラスが責任を持つべき。string型のプロパティがある…
コレクションの内容を一定のルールに従って違う型に変換したい場合 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>…
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>…
なんらかの処理を行ってコレクションを返すようなメソッドがあったとして、 こんな具合にパラメータがnullだったら例外を投げ返すんだったら public IEnumerable<object> Hoge(object obj) { if (obj == null) throw new ArgumentNullException("obj"); // なにか処</object>…
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; } こうする。ソースコー…
レガシープログラマの歴が長く、オブジェクト指向は独学、 何が良いプログラムで何が悪いプログラムなのかもやもやする・・・日々頭の中の考えがあっちいったりこっちいったりで切りがないので、 気が付いた時に文章に書いておいた方がいいかもしれない。今…
前回のエントリーの続きから nomoredeathmarch.hatenablog.com Publisherクラスのメソッドについて記述まずSubscribeメソッドから public static void Subscribe(ISubscriber subscriber) { try { Mutex.WaitOne(); if (subscriber == null) throw new Argum…
こちらの書籍の第8章で紹介されているパターン 通常のイベントハンドラを使わずにクラスをイベントに見立て、クラス間の結合を弱める。実践ドメイン駆動設計作者: ヴァーン・ヴァーノン出版社/メーカー: 翔泳社発売日: 2015/03/19メディア: Kindle版この商…
クラスライブラリに(WPFの)UserControlを追加するとたまに怒られることがある。どうやら参照設定にSystem.Xaml(XAMLのパース用ライブラリ?)を追加していない状態でUserControlを追加すると再現するみたい。 System.Xamlを参照設定に追加してビルドする…