.NET
データアクセスの最適化 前回は商品(Product)のオプション一覧をドメインモデル作成しました。目標としていたテストケースをパスできたのですがその時にSELECT文が17回発行されていました。今回はこのSELECT文の実行を削減というか調整したいと思います。…
商品(Product)ドメインモデル 今回は商品(Product)のドメインモデルを作成します。まずは、前回と同様にLINQ to SQLでアクセスするためのdbmlファイルを作成します。今回は複数のテーブルから構成される点や再帰構造や継承構造があるので前回よりも複雑に…
LINQの使いどころはいろいろあるだろうが、LINQを利用してドメインモデルのアプリケーションを作成するとどんな感じになるか気になっている。 そこで、実際にドメインモデルのアプリケーションを作成して評価してみる。題材はいつものハンバーガショップのモ…
Dynamically building LINQ expression predicates 動的にExpression Treeを作成するサンプルは今までもいくつかあったのですが、上記の方法はシンプルなのに十分に役立ちそうなヘルパーでGOODですね。LINQで動的な検索条件を簡単に作成できなければ、現在利…
Linq to SQLを利用した簡単なデータアクセスコンポーネントを考えてみました。とりあえず検索系だけ。 Linqを使うと便利になる点が沢山あるのですが、気に入ったのが検索条件の部分をExpressionで記述できる点です。たとえばこんな感じです。a => a.state ==…
Linq to SQLの技術は間違いなくデータアクセス層(DAL)の実装に影響を与えることになるでしょう。Linqが提供する機能を利用すれば多くのデータアクセスをSQL文なしで実装可能なようにも思えてきます。さらに、ビジネス層からの直接データ検索・更新するシナ…
Project Structure - By Artifact or Business Logic?普通2番目(ユースケース/機能ごと)を採用すると思うけど、1番目(コンポーネントタイプごと)を採用しているケースも案外あるのではないかな。 レイヤ構造または機能構造の優先順位でプロジェクトや…
RSSリーダをASP.NET Ajaxのクライアントサイドフレームワークで作成しWebPart化するシナリオです。 クライアントサイドでコントロールを作成するのはASP.NET Ajaxの知識範囲でOK。WebPart化する場合のポイントはScriptManagerの取扱い方法に工夫が必要な程度…
NDOCが2.0対応しないためSandcastleを利用してヘルプファイル(chm)を作成している。 Sandcastleだけでは大変なのでNDOCと同じようなGUIを持つSandcastle Help File Builderと合わせて利用している。 今まで快適に使っていて特に問題なかったのであるが、ク…
少し前に出て、すこし見ているのだけれども、なかなか面白い。 ページフローをWFで制御するなどチャレンジがあってよい。僕も以前ユースケースコントローラの実装を試していて、使えそうな感触を持っていたので、設計思想も含めて詳しく実装の中身を追ってみ…
基本的な考え方は、Submit直前に画面を覆うDIVを作成して画面上のコントロールをクリックできないようにします。DIVタグを利用する場合、IE6の問題でSelectタグが常にトップレベルに表示されてしまうので、Selectタグについてはdisplayをhiddenに設定して表…
なんか楽しそうなことしていますね。WFなんかは無理やり使っているように見える所なんかが本当に楽しそう。Build Google IG like AJAX Start Page in 7 days using ASP.NET AJAX and .NET 3.0詳しくはCodeProject
クライアントコンポーネント・オブジェクトタイプ ASP.NET AJAXのクライアントコンポーネントとしては「Components」「Behaviors」「Controls」の3つがある。 Components タイマーなどの非表示のコンポーネントで、DOM要素と関連付けられない。Sys.Componen…
RCがでましたね。ASP.NET AJAX 1.0 Release Candidate Now Available名前空間がMicrosoft.Web.ExtensionsからSystem.Web.Extensionsになりましたね。ASP.NETのコアとしてASP.NET AJAXを取り扱うということの表れだそうです。 UpdatePanelと検証コントロール …
今回は、AjaxControlToolkitを利用して簡単なコントロールを作成してみます。 まずは、今回の主役のクライアントサイドのコードの記述していきます。作成するコントロールはTextBoxに入力されていない場合にTextBoxの背景を変えることができる拡張コントロー…
ASP.NET AJAXを使うとサーバーサイドのプログラミングだけでAJAXを利用できます。もともとASP.NETではサーバコントロールでJavaScriptをラップしていますので、その延長で考えれば違和感無く使え、UpdatePanelを使えば特別なコードの追加無しに部分的な更新…
TypeクラスのNameプロパティで取得してもVBやC#の形式でタイプ名を取得できません。 そこで、Genericsクラスのタイプ名をVB形式で取得するためのメソッドを作成しました。 Public Function TypeString(ByVal t As Type) As String If t.IsGenericType Then D…
個人的にはTableAdapterはあまり利用しません。これは、いろいろ制限があるためで、そのひとつにアプリでSQL文をログできない点がありました。 最近これを解決する方法が見つかったのでサンプルコードを載せておきます。DataSetデザイナ上のテーブルアダプタ…
とりあえず一通りやった感想。 作っている間にいくつか新しいアイデアが浮かんできた。FillPolicyはその1つ、はじめはもう少しべたな方法で検索条件を変更できる仕組みぐらいしか考えていなかった。 コードを書くのが楽しい。フレームワークを作成しながら…
更新系の利用例として、引き続き以前作成したハンバーガショップのモデルを題材にしてみます。更新系なのでお買い上げを実装してみます。 まずは、お買い上げの型指定されたDataSetを作成します。今回は、お買い上げのトランザクションに関連するテーブルの…
型指定されたDataSetを永続化するための更新系の実装です。発想的には検索系とほぼ同じです。基本コンセプトはDataSetには各行は状態値を持って、追加、更新、削除を判断できるようになっています。この状態に合わせてデータベースに対してINSERT、UPDATE、D…
さらなる最適化 トランザクションスクリプト派やリッチSQL派の方からすれば、もっと最適化できると指摘されるかもしれません。たとえば、JOINを利用した最適化が考えられます。しかし、JOINによりSelect文の実行回数を減らしても、逆にJOINによって1つのSel…
データアクセスの最適化 さっそく最適化していきましょう。まずは、探索を親テーブルから子テーブルに限定しても今回のシナリオでは問題ないので、以下のように検索ポリシーを少し変えて実行します。もちろんドメインモデルは全く影響しません。 da.Fill(mod…
SQL文の実行 前述のドメインモデルを利用して今回作成したORMでどのようなSQL文が実行されるか見てみます。 ついでに検索ポリシーなどを利用してデータアクセスを最適化して、いろいろ考えてみたいと思います。テストするシナリオは、セット商品の料金を算出…
ハンバーガショップの料金計算 作成したORMの検索処理を少し複雑なモデルで実践で利用できるか確認します。シナリオは、以前作成したハンバーガショップのモデルの料金計算です。このシナリオでは関連データが階層構造になっているなどそれなりに複雑になっ…
検索処理の最適化 先程の例では、元の検索の検索結果の件数が多くなるとSQL文が長くなってしまう問題があります。このため、検索条件をいろいろ最適化していく必要があります。たとえば、以下のような元の条件を利用した相関サブクエリを利用する方法や場合…
データベースからDataSetへの読み出し データベースからDataSetへの読み出しは、検索対象のテーブルの検索条件を指定し行います。このときに、実際のSQL文は型指定されたDataSetの情報から自動生成され検索されます。さらに、検索対象のテーブルに関連してい…
DataSetへのORMコンポーネント 前回までで基本的な部品ができたので、実際のORM部分を作成していきたいと思います。ORMは、オブジェクト(O)とリレーショナル(R)DBのテーブルをマッピング(M)するための技術なのですが、もっとも基本的な目的はオブジェク…
データアクセスヘルパー コンポーネント データアクセスヘルパー コンポーネントは、P&Pなどでも紹介されているデータアクセスの基本的なコンポーネントで、データアクセスを実行する際に必ず処理を経由するコンポーネントです。主な役割はSQL文の実行だが追…
ソフトウエア・ファクトリの具体例として出てきているもので、Webサービス+データアクセスのコード生成が出来るようになっています。 以前、評価しようとしてインストールしていたのだが、仕組みのGAT(Guidance Automation Toolkit)の方が気になり、DEEPな…