nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for 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に変更するだけでいつの間にかできるようになっていました。

と思ったのもつかの間、この機能は2018年7月29日現在、無くなっているようです。

現在は、こちらの記事にあるような、野良拡張を入れるしか無いようです。
腹立ったので、公式のStoreに拡張をリリースするように現在申請しています。通ったらまた改定します。

forest.watch.impress.co.jp

続きを読む

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で数字始まりのカラムに対応する

Dapper.FastCRUD:ModelGeneratorを使う

Dapper.FastCRUDはDapperのExtensionライブラリです。DapperのExtensionライブラリは多数ありますが、以前に簡単に比較記事を書いていますので、良かったらご覧ください。

Dapperの拡張ライブラリは何がいいのか?ちょっとだけ調べてみた - nuits.jp blog

Dapper.FastCRUDにはDapper.FastCrud.ModelGeneratorという、データベースのスキーマからModelクラスを自動生成してくれるT4テンプレートがNuGet上に公開されています。

本エントリーでは、Dapper.FastCrud.ModelGeneratorを利用してModelクラスを自動生成する方法を解説します。

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

www.nuits.jp

続きを読む