.NET

ASP.NET MVCの技術者への3つの質問

ASP.NET MVCでWebアプリを開発する際にその方の技術力がどれぐらいなのか探らないといけない場合があります。 ASP.NET MVCでキーになるのは、ASP.NET MVCの仕組み以外に、JavaScriptやjQueryの知識も非常に重要です。もちろん、少数な質問で全てが分かるわけ…

Entity Frameworkってどうなの

最近Entity Frameworkってどうなんですか?と立て続けに聞かれました。 だいたい、過去にEntity FrameworkなどのORMを使ってパフォーマンスが出なかったり、更新系で苦労したりしていた経験があって、再度チャレンジを考えているようなチームからです。その…

ASP.NET MVCを利用した業務アプリについて

今年はASP.NET MVCを利用したアプリケーション開発に携わったのでその感想をまとめます。 軽量・小回りが利く ASP.NET WebFormに比べて出力するHTMLを全てコントロール可能でシンプルなHTMLを出力することができます。このためCSSやJavaScript(jQuery)の利…

DBデータをストリーム処理する

CEP(複合イベント処理)の記事を見ていてふと業務アプリのバッチ処理に利用できないかなと思いました。ストリーム処理する構造にアナロジを感じました。 .NETのADO.NETにはストリームの読み込みにはDataReaderがあり、書き込みにはSqlBulkCopyがあります。…

お手軽ビジネスルール管理(BRMS)

最近BRMSという言葉とよく聞くようになりました。言葉だけは以前から知っていいて昔のエキスパートシステムの派生版のように思っていました。しかし、現在はより広範囲に、(少し違和感を感じますが)プログラムの自動生成的なものにもBRMSという言葉を使う…

ASP.NETもMVVMに向かうのか

ASP.NET MVCにSingle Page Applicationというプロジェクトテンプレートが追加されるようです。 以前ここでも紹介したknockoutjsを利用してMVVMアプリケーションを実装するようで、さらにデータアクセス用の部品に「upshot.js」、ナビゲーション(履歴)管理…

WPFのDataGridヘッダーを2段組にする方法

簡単にできるかなと思って手をつけたのですが案外大変です。 最初のDataGrid まずは出発点となるDataGridですが以下のような3つの列を持つものです。 ヘッダーを2段にする ヘッダーを2段にする方法をまず検索したところいくつかアイデアが見つかりました。…

いま.NETで業務アプリを作成するんだったらRIA Serviceフレームワークを利用する

今.NETで業務アプリを作成するのであればRIAService+Silverlightを使うことを勧めするだろうな。理由は高い生産性。 サーバー側の仕組みはEntity FrameworkとRIA Serviceで本当に簡単に作成できるし、クライアント側についてもRIA Serviceの呼び出しやエン…

MVVMのバインド処理をインターセプトする

MVVMのフレームワークはいくつかある。代表的なのは、PrismだがCodePlexを探すだけでもいろいろある。 面白いものにはこんなのもあるIntroducing MicroModels 。このフレームワークではICustomTypeDescriptor インターフェイスを利用して動的にバインドする…

MVVMについて

MVVMをかなり使い込んで来たのでいろいろまとめたい内容があるのだがなかなか時間がとれない。 とりあえずポイントをメモ書きしておく 業務アプリでのMVVMでのメリットは テスト性の向上などはあるが、最大のメリットはテクノロジ非依存に画面ロジックを作成…

C#でシンボルを実現する

これはいい。Symbols in C# 3.0 http://themechanicalbride.blogspot.com/2007/03/symbols-on-steroids-in-c.html以下のようにobjectクラスを拡張すると public static string GetPropSym<TObj, TProp>( this TObj @this, Expression<Func<TObj, TProp>> expression) { return ((MemberExpre</func<tobj,></tobj,>…

MEFはGenericsをサポートしない?

案外Genericsって使われていない?でも書いたけどDIでGenericsをサポートする要望は多いはずなのに。残念。回避方法はあるのかな。元ねたは以下です。MEFはタイプベースじゃないんですねWhy doesn’t MEF support open-generics for exports? Because MEF is …

画面処理でExpression Builderを使ってみる

まずは、ベースになるWindowsアプリケーションの画面処理です。よくあるコードで、4桁までの数値を入力検証します。このコードを改善していきます。 textBox1.MaxLength = 4; textBox1.ImeMode = ImeMode.Off; textBox1.Validating +=new CancelEventHandler…

Entity Frameworkで実行されたSQL文のログ

EF(Entity Framework)を少しいじってみようと思い、SQL文のログ出力機能を探したのだが、既存機能で提供されて無いようです。ObjectQueryやEntityCommandのToTraceStringメソッドで一部取得できるのだが、実行されるすべてのSQL文を出力は提供されていない…

FxCopでCyclomatic complexityのチェックができたんだ

VS2008ではさまざまなメトリックスが算出できるようになりますが、VS2005でもあったんだ。「CA1502:メソッドの実装を複雑にしすぎないでください」がそれのようです。25より大きいと警告がでるようです(以下参考)CA1502: Avoid Excessive complexity - Cod…

LINQ Framework Design Guidelines

VBではSystem.Objectを拡張することは避ける(VBでObject型を使うと実行時にメソッドを解決する。拡張メソッドはコンパイル機能であるため実行エラーになるため)などが記述してあったので、LINQを利用するためのガイドかなと見ていたら、Query PatternなどL…

ASP.NETのMVCフレームワーク

fowlerも言及しているALT.NET Confで発表されたASP.NET MVC Frameworkについて、今さらMVCフレームワークをASP.NETに導入するメリットってどうなんだろうと正直思った。 詳しく見ていないけどFowlerも技術的な新しさは無いと言っているのでStruts的なものな…

型指定されたDataSetにActive Record機能をつけてみた

Partial Classにビジネスロジックを書けるなど、シンプルにコードが書けて案外いい。仕組みは、型指定されたDataSetの自動生成されたコードに対してCodeModelを使ってビルド時に改変するようにしました。プリコンパイラみたいなもの。 Active RecordとDataSe…

簡単ドメインモデル実装

今考えているフレームワークではドメインモデル(リッチなデータ)を実装すればあとは自動的にフレームワークが処理してくれます。いい感じに仕上がりそうです。GenericsとRealProxyの利用が中心で、Emitは全く使っていませんがかなりのことができますね。 […

Dynamic Proxyの実装

RealProxyを利用する方法はターゲットがMarshalByRefObjectのサブクラスじゃないといけない思われがちですが、インタフェース経由でアクセスすることで任意のクラスを対象にできます。*1この簡潔な実装があったのでメモただ、MethodCallMessageWrapperクラス…

C#2.0でMix-inを実現する

C#3.0で導入される拡張メソッドを使うとMix-in的なことができます。非常に便利な仕組みで是非C#2.0+VS2005でも使ってみたいと思いチャレンジします。*1 外部メソッド(Foreign Method)を使う C#3.0で導入された拡張メソッドは、外部メソッド・パターンをコン…

ドメインモデル駆動開発をやってみる(7)

前回ドメインモデルにLINQ to SQLのメタ情報を付与して永続化の仕組みを構築しようと考えましたが、LINQ to SQLが要求するいくつかのインタフェースを実装するためにドメインモデルをかなり変更する必要があり断念しました。 今回は違う方法でチャレンジしま…

ドメインモデル駆動開発をやってみる(6)

データベースを定義せずにドメインモデルを利用して開発を進めてきました。画面も含めて特に問題なく開発することはできました。作成されたドメインモデルはこんな感じになっています。 [Serializable] public partial class Message : IValidator { public …

ドメインモデルをLINQで構築する

まだまだLINQについて調べたいことはたくさんあるが、とりあえず、いくつかのドメインモデルのパターンを作成したので振り返りまとめとします。 ORMとしてLINQ to SQL 一言でいってよくできたORMフレームワークです。 Expression TreeをSQLに変換するアイデ…

ドメインモデルをLINQで構築する(その9)

前回に引き続き帳票シナリオです。前回アドホックな処理をリファクタリングを通して汎用的なメソッドを見つけ出し共通化を促進しました。しかし、このメソッドにはデータアクセスの処理が残っていますので、まずはデータアクセスを切り離し、さらにデータア…

ドメインモデルをLINQで構築する(その8)

帳票シナリオ 今回からは、LOBアプリの帳票でよく出てくる生情報をサマリーして様々な指標を算出するシナリオを考えていきます。具体的には店舗ごとの売上指標を表示するなシナリオを目標にドメインモデルを構築していきます。 アドホックな処理 最初の実装…

ドメインモデルをLINQで構築する(その7)

今回は更新系のSQL文のカスタマイズにチャレンジします。 オブジェクトのトラッキング LINQ to SQLには検索したオブジェクトの変更管理を行う仕組みあり、dbmlファイルで作成したコードにも組み込まれます。 [Table(Name="dbo.Shops")] public partial class…

ドメインモデルをLINQで構築する(その6)

今回はお買い上げの様々なバリエーションを実装していきます。 オプション商品の指定 オプションを持つ商品をお買い上げするシナリオです。 [TestMethod] public void TestSetOrder() { using (var db = new BurgerShopDataContext()) { db.Log = Console.Ou…

ドメインモデルをLINQで構築する(その5)

検証ロジック 前回空のお買い上げ(Order)を登録するシナリオを作成しましたが、実際に空のお買い上げを登録しては問題になります。お買い上げを登録する場合には検証が行い問題が無いか確認する必要があります。 テストケースを書き直し空のお買い上げの場合…

ドメインモデルをLINQで構築する(その4)

前回までは参照シナリオを取り扱っていましたが今回から数回に分けてお買い上げ(Order)の更新シナリオを取り扱います。 お買い上げ(Order)ドメインモデル まずは、今までと同じようにLINQ to SQLのマッピング情報であるdbmlを作成します。ただし、今までと…