アーキテクチャ

なぜService Locatorはメジャーじゃないの

いまさらなんですが、Service LocatorってDIにくらべて脚光を浴びないですね。同じような効果があって、個人的にはDIと同じ程度、最近ではいままでDIを利用していた個所でもMicro Kernel+Service Locatorを使っているのにな、なぜなんでしょうかね。良いフ…

簡単ドメインモデル実装

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

遅延ロードを避ける

シンプルなドメインモデル実装 ドメインモデルを作成するときに、遅延ロードを利用すると、データアクセスのコストやロック、トランザクションなど様々なことを意識する必要がありかなり難しくなります。ドメインモデル実装が難しいという方の意見としても遅…

Linqを使えばデータアクセス層は簡単だ。

Linq to SQLを利用した簡単なデータアクセスコンポーネントを考えてみました。とりあえず検索系だけ。 Linqを使うと便利になる点が沢山あるのですが、気に入ったのが検索条件の部分をExpressionで記述できる点です。たとえばこんな感じです。a => a.state ==…

Linqを使えばデータアクセス層は不要?

Linq to SQLの技術は間違いなくデータアクセス層(DAL)の実装に影響を与えることになるでしょう。Linqが提供する機能を利用すれば多くのデータアクセスをSQL文なしで実装可能なようにも思えてきます。さらに、ビジネス層からの直接データ検索・更新するシナ…

Web Client Software Factory

少し前に出て、すこし見ているのだけれども、なかなか面白い。 ページフローをWFで制御するなどチャレンジがあってよい。僕も以前ユースケースコントローラの実装を試していて、使えそうな感触を持っていたので、設計思想も含めて詳しく実装の中身を追ってみ…

DIコンテナをマイクロカーネルで実装

Castle ProjectでもDIコンテナが提供されている。Inversion of ControlこのDIコンテナのアーキテクチャが興味を引いた。DIコンテナの基本的な仕組みをマイクロカーネルとして実装しているのである。確かにDIするインタフェースをサービスと考えればしっくり…

簡易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文の実行だが追…

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

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

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

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

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

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

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

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

簡易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みたいな等号フィルタを作ることももちろん可能できすが、同じよ…

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

検索条件構築クラス(QueryObject) まずは、検索条件構築クラスを作成していきたいと思います。 この検索条件クラスを導入するメリットは、データアクセスクラスの汎用化を進めてくれます。 データアクセスの条件をデータアクセスを行うメソッドの引数で表現…

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

.NETの型指定されたDataSetをメタデータとしてORマッピングできる簡易フレームワークを作成してみる。 あまり複雑なことはしないで、できるだけシンプルなものにする予定だ。まず、最初のシナリオは以下のようなものをターゲットにしてみる。 [Test] public …