No more Death March

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

c# リフレクションの使いどころを考える

ソフト全体で使いたいインターフェースがある時、 インターフェースとその実装を同じプロジェクトに入れると実装部分をメンテナンスする度に大規模なビルドが必要になる。そもそも抽象(インターフェース)に依存して処理を標準化するのに実装を直す度にビル…

ステートソーシングな設計をイベントソーシングな設計に

ステートソーシングな設計の「商品テーブル」をイベントソーシングな設計に置き換える時のイメージをメモ「商品テーブル」 ・ID ・コード ・名称 ・登録担当者ID ・登録日時 ・更新担当者ID ・更新日時 ・削除担当者ID ・削除日時手順1)ドメインに…

C# プロパティとメソッドの違い

プロパティとメソッドとの違いについておさらいします。MSDNに掲載されている説明は以下の通り。プロパティとメソッドの選択 一般的に、メソッドは操作を表し、プロパティはデータを表します。 例えば「人」オブジェクトがあれば、 「名前」や「性別」は…

書籍「現場で役立つシステム設計の原則」を読んでみて。

7月5日に発売されたのでさっそく購入しました。現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法作者: 増田亨出版社/メーカー: 技術評論社発売日: 2017/07/05メディア: Kindle版この商品を含むブログを見るこの本の著者…

文字列からプリンタを取得

using System; using System.Printing; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var queueByFullName = new PrintQueue(new LocalPrintServer(), LocalPrintServer.GetDefaultPrintQueue().FullName); Console.…

インストールされているプリンターの一覧を取得する。

using System; using System.Printing; namespace LocalPrintersName { class Program { static void Main(string[] args) { foreach(var queue in new LocalPrintServer().GetPrintQueues()) { Console.WriteLine(queue.FullName); } Console.ReadLine(); }…

既定のプリンター名を取得する。

using System; using System.Printing; namespace DefaultPrinterName { class Program { static void Main(string[] args) { Console.WriteLine("既定のプリンタは{0}です。", LocalPrintServer.GetDefaultPrintQueue().FullName); Console.ReadKey(); } } …

WPFで帳票 参考リンク

ネットで色々検索してみるとWPFでも帳票印刷が出来るらしい。 後で参考に出来そうなリンクをメモ以下参考: WPFでの印刷の基本(1) 単一ページの印刷 - Qiita WPFでの印刷の基本(2) 複数ページの印刷 - Qiita WPFを帳票フレームワークとして使う - @kotyの…

C# App.Configでエラー

DbProviderFactoriesの仕組みを勉強してて、DbProviderFactories.GetFactoryClasses()でConfigurationErrorExceptionが発生。App.Configをよ~く見てみるとセクションの後のスペースが交っていた。 これを消してやると解消。1時間くらい悩みました・・・

C# 月初日

C#

public DateTime MonthFirstDate(DateTime value) { return new DateTime(value.Year, value.Month, 1); } DateTimeのコンストラクタの日にち部分に1を渡す。

C# 月末日

C#

public DateTime ToMonthLastDate(DateTime value) { return new DateTime(value.Year, value.Month, DateTime.DaysInMonth(value.Year, value.Month)); } 年と月はそのまま、日にちだけDateTimeクラスのDaysInMonthメソッドに年と月を渡してやる。 VB6の時…

インターフェースを考える(14)考えを整理(出来ていない)

C#実践開発手法のシングルメソッドインターフェースで色々書いてきたけども、 途中途中浮かんだ考えをだぁーっと箇条書きにしてみる。C#実践開発手法 デザインパターンとSOLID原則によるアジャイルなコーディング作者: ゲイリーマクリーンホール出版社/メ…

インターフェースを考える(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で使うことが出来ない。 少し仕組みを作ってやれば使えるみたいですが、 大して記述量も変わらないし自力で作った方が良いかも?