nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Visual Studio and Development Technologies。なお掲載内容は個人の見解であり、所属する企業を代表するものではありません。

CodeZineさんで「実践WPF業務アプリケーションのアーキテクチャ」という記事を書かせていただきました。

CodeZineさんで「実践WPF業務アプリケーションのアーキテクチャ」という記事を書かせていただきました。

  • 実践WPF業務アプリケーションのアーキテクチャ ~ マイクロソフト公式サンプルデータベースAdventureWorksを題材に

マイクロソフトさんの公式サンプルデータベースであるAdventureWorksを題材にして、仮定の業務の元、エンタープライズな業務システム全体のアーキテクチャを検討し、記述したものになります。決定結果だけではなく、なぜその決断をしたのか?という点まで記載しています。

アプリケーションの実現方法は、たった一つの正解はありませんし、仮定の業務自体曖昧な点が多く、私はベストプラクティスだと思って書きましたが、読む方にとってはそう感じないこともあるかもしれません。正直、マサカリが本当に恐ろしい記事でもあります。

しかし、個別技術であったり、汎用的なアプリケーション アーキテクチャ パターンではなく、「じゃぁ実際にそれらを組み合わせて、どうシステムを作るの?分からないよ!」という思いが昔から私自身にもありましたし、そういう情報はなかなか公開されていないため、勇気を持って記述してみました。

アーキテクチャ構築に悩む人への一助になれば幸いです。

さて今回の件ですが、実はGrapeCity社の方からコンポーネント紹介記事を書いてもらえませんか?というリクエストを頂いたのが発端でした。その際に

「コンポーネントの紹介は最小限で構いませんので、実践的なアプリケーションを構築するアーキテクチャを中心に、WPFの普及も視野に入れた記事を書いてもらえないか?」

とご要望をいただきました。お声がけいただいて即、面白そうだと思いました。これまで自分が仕事の中で貯めて来たノウハウを形としてアウトプットするいい機会でもあると思いました。

その結果暴走して、当初は3〜4ページでというリクエストだったのですが、11ページに膨張しまくり、なのにGrapeCityさんのコンポーネントに触れているのは3ページほどしか無いという…

この記事を承認いただき、公開できたのはひとえにGrapeCityさんの懐深い対応のおかげと考えています。本当にいい機会をいただき、ありがとうございました。

また非常に素晴らしい紹介記事も書いていただき、恐悦至極とはこのことかと実感中です。

devlog.grapecity.co.jp

内容に関しては、各人色々なご意見があるかとは思います。しかし、誰かが何かを書かないと何も始まらないという思いもあり、勇気を振り絞って書きました。異論・質問色々あるでしょうけど、気軽にコンタクト取っていただけたら、真摯に対応させていただこうと思います。

というわけで、ご一読いただけたら幸いです。

Microsoft Edgeで右クリからGoogle検索する方法

方法は簡単で、Edgeのデフォルトの検索プロバイダをGoogleに変更するだけでいつの間にかできるようになっていました。

手順は次の通り。

1. 一度Googleを開く

検索プロバイダをEdgeに認識させる必要があるので、いったんGoogleを開きましょう。

https://google.co.jp

2. Edgeの設定を開く

f:id:nuitsjp:20180401231145p:plain

3. 詳細設定を開く

f:id:nuitsjp:20180401231314p:plain

4. 検索エンジンの変更でGoogleを選ぶ

f:id:nuitsjp:20180401231428p:plain

これだけ。

5. 使い方

検索したい単語を範囲選択し、右クリックします。

f:id:nuitsjp:20180401230736p:plain

コンテキストメニューから「Google内の~」を選択すると

f:id:nuitsjp:20180401230808p:plain

このように、検索結果が新しいタブで開かれます。個人的に期待していた通りの振る舞いです。

Edgeを使わない最大の問題が解消された。だがしかし、全ての問題が解消されたわけではないけど。長いページ開いたときに表示がおっそい問題をどうにかしてください。

いや、びっくりしたなあ。コルタナさんしか選べなかったと思ったんだけど、いつ変わったんだろう?

SimpleInjectorでCastle.Core DynamicProxyを適用する拡張ライブラリを公開しました

表題の通りですが、SimpleInjectorでCastle.Core DynamicProxyを適用する拡張ライブラリをNuGetに公開しました。

www.nuget.org

こんな感じでつかいます。

var container = new Container();

container.InterceptWith<IncrementInterceptor>(x => x == typeof(Target));

container.Register<Target>();
container.Register<IncrementInterceptor>();
container.Verify();

var target = container.GetInstance<Target>();
Console.WriteLine(target .Increment(1));

InterceptWithのところで、IInterceptorを適用する条件と、適用するIInterceptorの実装を指定しています。上の例ではTargetクラスのみにIncrementInterceptorを適用しています。

実際にはトランザクション管理や認証などの処理を、ASP.NET Web APIのControllerなどに一括して適用などの利用方法が便利です。

つづきにもう少し詳しい情報を記載しておきます。

続きを読む

Dapper.FastCrud.ModelGeneratorで数字始まりのカラムに対応する

Dapper.FastCrud.ModelGeneratorを利用することで、DapperおよびDapper.FastCrudから利用できるテーブルに対応するクラスを手軽に作成することができます。

Dapper.FastCRUD:ModelGeneratorを使う - nuits.jp blog

しかし、標準のテンプレートではデータベースのカラム名が数字で開始していた場合、コンパイルエラーになるコードが生成されてしまいます。ここではテンプレートを修正して、数字始まりのカラムも適切に扱えるよう修正する方法を説明します。

なおGistに、この問題とあわせて、スキーマ名の明示的指定に対応したテンプレートを公開しています。こちらから GenericModelGenerator.tt と SampleModelGeneratorConfig.tt の二つのファイルをコピペすることで、対応することもできます。

Template for setting Schema name for Dapper.FastCrud.ModelGenerator · GitHub

あと良かったらこちらもどうぞ。

www.nuits.jp

それでは改修個所を解説しましょう。

続きを読む

Dapper.FastCrud.ModelGeneratorでスキーマ名を明示的に指定する

Dapper.FastCrud.ModelGeneratorを利用することで、DapperおよびDapper.FastCrudから利用できるテーブルに対応するクラスを手軽に作成することができます。

Dapper.FastCRUD:ModelGeneratorを使う - nuits.jp blog

しかし標準のテンプレートではスキーマ名が指定されないため、デフォルトのスキーマ(SQL Server だと dbo)だけ利用している分には問題ないのですが、任意のスキーマを利用していた場合、自動生成されたコードでは実行時にエラーになります。

なおGistに、この問題とあわせて、数字始まりのカラムでコンパイルエラーになる問題にも対応したテンプレートを公開しています。こちらから GenericModelGenerator.tt と SampleModelGeneratorConfig.tt の二つのファイルをコピペすることで、対応することもできます。

Template for setting Schema name for Dapper.FastCrud.ModelGenerator · GitHub

あと良かったらこちらもどうぞ。

www.nuits.jp

それではコード生成時に明示的にスキーマ名を指定するように、テンプレートを修正する方法を説明します。

続きを読む

Dapper.FastCRUD関連エントリー:目次

Dapper.FastCRUDは、Dapperの拡張ライブラリです。Dapper単体では提供されない範囲のCRUDについてのサポートを提供します。

本エントリーは、当ブログで記載した Dapper.FastCRUD 関連のエントリーの目次となります。今後も不定期に更新していきます。

  1. Dapper拡張ライブラリ比較
  2. Dapper.FastCrud.ModelGenerator
    1. ModelGeneratorを使う
    2. Dapper.FastCrud.ModelGeneratorでスキーマ名を明示的に指定する
    3. Dapper.FastCrud.ModelGeneratorで数字始まりのカラムに対応する