2006-01-01から1年間の記事一覧

拡張メソッドの使い道

A Ruby-like Mixin for NSpec Using C# 3.0 Extension MethodsC#3.0の拡張メソッドを利用するとRSpecのようにコードが書け直感的にで読みやすくなる。 RSpec user.username.should_equal "username" NSpec(C#3.0) user.Username.ShouldEqual("username") ち…

Easy to Write vs. Easy to Read

DDD

書き易いコードそれとも読み易いコード。コードを書くときに意識しているのはどちらでしょう?March is Not a Number

ヘッダーインタフェースと役割インタフェース

DDD

RoleInterfaceインタフェースのメソッドやプロパティのまとめ方としてヘッダーインタフェースと役割インタフェースの2パターンがあって説明している。 役割インターフェースは今までもOOの世界では利用されていたが、ヘッダーインタフェースというのは聞い…

イベントに依存するリソース

リソースなんだけれども日付をもったりイベントから導出された結果を持っているようなモデルを作成していろいろ考えてみます。 シナリオ 顧客に対して、会員契約、過去取引実績による割引率を管理するようなマスタを利用するシナリオで、顧客・注文・商品の…

関数従属性は統辞論的(シンタックス的)か

ER

モデリングのスタイル:意味論と統辞論について 上記でERモデルを作成する方法として、『関数従属性』を利用する方法と『リソース・イベントを区別』する方法について言及されています。いくつか気になる点があり、その中でも「関数従属性」が「統辞論的な枠…

Domain Driven Design Quickly

DDD

DDDのMini Bookです。詳しくは見ていませんがEric Evans本の抜粋のようですね。 Domain Driven Design Quickly レジストが必要です。

ASP.NET AJAXをつかってみる(4)

クライアントコンポーネント・オブジェクトタイプ ASP.NET AJAXのクライアントコンポーネントとしては「Components」「Behaviors」「Controls」の3つがある。 Components タイマーなどの非表示のコンポーネントで、DOM要素と関連付けられない。Sys.Componen…

ASP.NET AJAXをつかってみる(3)

RCがでましたね。ASP.NET AJAX 1.0 Release Candidate Now Available名前空間がMicrosoft.Web.ExtensionsからSystem.Web.Extensionsになりましたね。ASP.NETのコアとしてASP.NET AJAXを取り扱うということの表れだそうです。 UpdatePanelと検証コントロール …

フレームワークを作成するためのスキル

業務アプリ用のフレームワーク構築のふりかえりミーティングであがった話題。 デザインバターンやPOSA、PofEAAなど良質の設計知識を吸収したり、既存のフレームワークを調べたりするなどがその時に思いついた。 でも、再度考えてみると、ソフトウエア工学の…

ASP.NET AJAXをつかってみる(2)

今回は、AjaxControlToolkitを利用して簡単なコントロールを作成してみます。 まずは、今回の主役のクライアントサイドのコードの記述していきます。作成するコントロールはTextBoxに入力されていない場合にTextBoxの背景を変えることができる拡張コントロー…

ASP.NET AJAXをつかってみる(1)

ASP.NET AJAXを使うとサーバーサイドのプログラミングだけでAJAXを利用できます。もともとASP.NETではサーバコントロールでJavaScriptをラップしていますので、その延長で考えれば違和感無く使え、UpdatePanelを使えば特別なコードの追加無しに部分的な更新…

値に有効期間を持つマスタデータの設計パターン

値に有効期間を持つマスタデータの設計パターンを整理してみました。FowlerのTemporal Patternsであげられているものを参考にしました。設計パターンとしては大きく3つの方法を考えました。 有効期間ごとにマスタデータを保持している(Temporal Object) …

マスタメンテナンスで未来のデータを入力したいんですけどの続き

今回作成したモデルについて、ビューを使うか導出のテーブルを使うかなどは、実装のシンプルさやパフォーマンスの観点で選択すればよいと思います。これらの選択は、論理レベルの設計にもあまり影響しませんが、(現在)マスタや履歴データをどの様にどのデ…

Genericsクラスのタイプ名VB形式で取得する

TypeクラスのNameプロパティで取得してもVBやC#の形式でタイプ名を取得できません。 そこで、Genericsクラスのタイプ名をVB形式で取得するためのメソッドを作成しました。 Public Function TypeString(ByVal t As Type) As String If t.IsGenericType Then D…

マスタメンテナンスで未来のデータを入力したいんですけどの改訂

マスタメンテナンスで未来のデータを入力したいんですけどのモデルをみたらおかしな点に気付いたので改訂します。 商品IDマスタと商品CDマスタの関連には2つ別々の意味があり別にしなといけなかったのを1つで扱っていたためにおかしなモデルになっていまし…

マスタメンテナンスで未来のデータを入力したいんですけど

考えてみました。 題材は商品マスタのシナリオで商品名が変化し、未来のデータを入力できる構造を考えてみます。まずは識別子の抽出をします。 業務的には、現在の商品体系を現す商品CDと過去・未来を含めた商品IDの2つのコード体系を利用していると仮定し…

TableAdapterで実行されるSQL文をログする

個人的にはTableAdapterはあまり利用しません。これは、いろいろ制限があるためで、そのひとつにアプリでSQL文をログできない点がありました。 最近これを解決する方法が見つかったのでサンプルコードを載せておきます。DataSetデザイナ上のテーブルアダプタ…

簡易ORMフレームワークを作成してみる(完)

とりあえず一通りやった感想。 作っている間にいくつか新しいアイデアが浮かんできた。FillPolicyはその1つ、はじめはもう少しべたな方法で検索条件を変更できる仕組みぐらいしか考えていなかった。 コードを書くのが楽しい。フレームワークを作成しながら…

簡易ORMフレームワークを作成してみる(20)

更新系の利用例として、引き続き以前作成したハンバーガショップのモデルを題材にしてみます。更新系なのでお買い上げを実装してみます。 まずは、お買い上げの型指定されたDataSetを作成します。今回は、お買い上げのトランザクションに関連するテーブルの…

簡易ORMフレームワークを作成してみる(19)

型指定されたDataSetを永続化するための更新系の実装です。発想的には検索系とほぼ同じです。基本コンセプトはDataSetには各行は状態値を持って、追加、更新、削除を判断できるようになっています。この状態に合わせてデータベースに対してINSERT、UPDATE、D…

簡易ORMフレームワークを作成してみる(18)

さらなる最適化 トランザクションスクリプト派やリッチSQL派の方からすれば、もっと最適化できると指摘されるかもしれません。たとえば、JOINを利用した最適化が考えられます。しかし、JOINによりSelect文の実行回数を減らしても、逆にJOINによって1つのSel…

簡易ORMフレームワークを作成してみる(17)

データアクセスの最適化 さっそく最適化していきましょう。まずは、探索を親テーブルから子テーブルに限定しても今回のシナリオでは問題ないので、以下のように検索ポリシーを少し変えて実行します。もちろんドメインモデルは全く影響しません。 da.Fill(mod…

簡易ORMフレームワークを作成してみる(16)

SQL文の実行 前述のドメインモデルを利用して今回作成したORMでどのようなSQL文が実行されるか見てみます。 ついでに検索ポリシーなどを利用してデータアクセスを最適化して、いろいろ考えてみたいと思います。テストするシナリオは、セット商品の料金を算出…

簡易ORMフレームワークを作成してみる(15)

ハンバーガショップの料金計算 作成したORMの検索処理を少し複雑なモデルで実践で利用できるか確認します。シナリオは、以前作成したハンバーガショップのモデルの料金計算です。このシナリオでは関連データが階層構造になっているなどそれなりに複雑になっ…

簡易ORMフレームワークを作成してみる(14)

検索処理の最適化 先程の例では、元の検索の検索結果の件数が多くなるとSQL文が長くなってしまう問題があります。このため、検索条件をいろいろ最適化していく必要があります。たとえば、以下のような元の条件を利用した相関サブクエリを利用する方法や場合…

簡易ORMフレームワークを作成してみる(13)

データベースからDataSetへの読み出し データベースからDataSetへの読み出しは、検索対象のテーブルの検索条件を指定し行います。このときに、実際のSQL文は型指定されたDataSetの情報から自動生成され検索されます。さらに、検索対象のテーブルに関連してい…

簡易ORMフレームワークを作成してみる(12)

DataSetへのORMコンポーネント 前回までで基本的な部品ができたので、実際のORM部分を作成していきたいと思います。ORMは、オブジェクト(O)とリレーショナル(R)DBのテーブルをマッピング(M)するための技術なのですが、もっとも基本的な目的はオブジェク…

簡易ORMフレームワークを作成してみる(11)

データアクセスヘルパー コンポーネント データアクセスヘルパー コンポーネントは、P&Pなどでも紹介されているデータアクセスの基本的なコンポーネントで、データアクセスを実行する際に必ず処理を経由するコンポーネントです。主な役割はSQL文の実行だが追…

アーキテクチャチームは積極的に技術リスクをとるべきだ

アーキテクチャなどの基盤を作成するチームは、積極的に技術リストをとって、個別アプリケーションを作成するチームの技術リスクを排除すべきだ。 難しい技術をケースバイケースなどと考えるのではなく割り切って提示する 難しい技術は必ずラップして直接さ…

Web Service Software Factory

ソフトウエア・ファクトリの具体例として出てきているもので、Webサービス+データアクセスのコード生成が出来るようになっています。 以前、評価しようとしてインストールしていたのだが、仕組みのGAT(Guidance Automation Toolkit)の方が気になり、DEEPな…