2006-11-01から1ヶ月間の記事一覧

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

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

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な…

自動プロパティ

C# Automatic Properties public string Bar { get; set; } 上記は以下のように自動的に変換される private string foo; public string Bar { get { return foo; } set { foo = value; } } 微妙だけど案外うれしいかも。できるだけコードは書きたくないから…

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

SQL文自動生成 型指定されたDataSetからSQL文の作成する際のポイントは、個別のDBMSの機能をどのようにして外だしするかです。今回はDbProviderAdapterでカラムやテーブル名のスケープ処理やRDBMS固有の関数名を隠居しています。微妙な違いはサブクラス化し…

UIでドメインモデルを利用しないリスク

DDD

僕は出来るだけUIでドメインモデルを直接利用したいと考えています。しかし、この考えと逆にUIでドメインモデルを直接扱うべきでないという意見があります。もちろん納得できませんが、主張しているいくつかのポイントについて考えてみます。 ORMのLazy Load…

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

SQL文自動生成 前回の続きで、型指定されたDataSetの情報からSQL文を作成するクラスライブラリについて整理していきます。まずは、全体のクラス構成から見てみましょう。SQL文の生成の中心的なクラスはDataCommandBuilderクラスです。GetSelectCommandやGetD…

AOPでコーディング規約をチェック

OO エンジニアの輪 〜 第 35 回 千葉 滋 さんの巻 〜アスペクト指向を業務で使うときの良い例は、コーディング規約ですね。最初にこういうメソッドを呼ぶとか、初期化メソッドはこういう名前にしておくとか、何かするときはこのメソッドを呼んでから始めると…

Cycle Mode

今日はCycle Modeに行ってきた。いろいろ目当てのバイクを試乗してきた。楽しかったのだが、ブースを回ったりも含めて4時間ぐらい、歩いたり自転車に乗り続けたので、少し疲れてしまった。 でも、もらったカタログを見ていると、最近めっきり減った物欲が久…

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

CRUD SQL文の生成 型指定されたDataSetにはテーブルに関する情報が豊富に保持されています。テーブル名、カラム名、プライマリキーなどなど。これらの情報を利用すると簡単に決まりきった検索・更新などのSQL文を作成することができます。たとえば、SELECT文…

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

ソートと範囲指定 個々の検索条件アイテムはある程度作成できたので、次はソート条件と何件目から何件取得するかかの範囲指定の条件を指定できるようにします。目標のシナリオは以下のようになります。QueryObjectにソート条件を追加できるようにします。 [T…

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

AND,OR,NOTの追加 次の目標のシナリオはAND、OR、NOTの論理演算が利用できるようにします。 AND、OR、NOTは構成に要素に他の検索条件すなわちCriteriaを持つようになります。FilterCriteriaの構成要素では単純なパラメータしか表現できなため、これらを表現…

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

検索バリエーションの追加 等号をシナリオが完成できたので、更にいろいろバリエーションを増やしていきます。ということで次に実現するシナリオを決定しましょう。等号の次といえばたはり不等号でしょうか。 [Test] public void 不等号() { QueryObject qo …

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

SQL文の生成 QueryObjectから実際のSQL文を生成する基本的には責務はQueryObjectBuilderがもちます。 ただ、今回はCriteriaもRDBMSに依存しない範囲でフィルタ条件などの生成責務をもつようにすることでCriteriaの一般化と単純化を狙うようにします。なお、…

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

等号フィルタの作成 基本的な構造が出来上がったのであとはバリエーションを増やしていくだけです。 まずは、最初のシナリオを実現するための等号フィルタの作成に取り掛かります。 EqCriteriaみたいな等号フィルタを作ることももちろん可能できすが、同じよ…