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

自動プロパティ

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

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

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

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

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

吉野家で牛丼を食べた

今日は良い天気だったので自転車でミナミまで街ポタした。昼ごはんは吉野家で復活した牛丼を食べようと思い、どこの吉野家で食べようか考えた。日本橋にあることを思い出して、行ってみたら並んでいなかったので並+たまご+おしんこを食した。別にどうてこ…

DTOとプレゼンテーションモデルの混乱

DDD

DTOはサービス層で提供するメッセージスキーマでプレゼンテーションモデルは画面(VIEW)を抽象化したもので目的や構造が全く違うものである。にもかかわらず、同じものとして取り扱われているように見受けられる。 DTOをサービス層におけるメッセ…

ユースケースコントローラをWFで作成してみる(3)

WF

取りあえず、細かいところはいい加減ですが、ほぼシーケンス図のように実装してみた。テクニカルな点はいろいろあるが、ユースケースのフローをそのまま処理を記述できる点は非常に直感的で分かりやすくて良い。たとえば、請求書発行後にオーダを処理完了に…

ユースケースコントローラをWFで作成してみる(2)

WF

ワークフローとその他のコンポーネントの関係および実装イメージが分かりやすいようにシーケンス図を記述。 アクターから「オーダユースケースコントローラ」に入ってくるのがシステム・サービスになる。ユースケースの処理シーケンスは「オーダユースケース…

ユースケースコントローラをWFで作成してみる(1)

WF

WFを利用してどのようなことが可能かいろいろ考えてみたい。 まずは、アプリケーションロジックの実装としてユースケースコントローラを考えてみる。 ユースケースのシナリオとしては以下の通り。単純なオーダ業務を想定。 顧客からのオーダを受注担当者がシ…

ドメインモデルのJOIN処理

DDD

ドメインモデルが使えないという指摘でよくあがるの1つとしてエンティティのJOIN処理がある。 主な指摘ポイントは、パフォーマンス面とJOIN処理の簡便さの2点であると思っている。 データ操作自体はRDBMSの得意分野なので基本的にはドメインモデルよりもい…

ドメインモデルとワークフロー

.NETのWFがもう少しでリリースされるが、どのような利用方法があるか。 ヒューマンワークフローやビジネスオートメーションの利用が考えられるが、ドメインモデルに関連して利用できないか。まずは、ドメインモデルからWFを利用する方法としては、エンティテ…

複数のエンティティをまたがるビジネスルールの実装

DDD

ビジネスルールを実装するとき、特定のエンティティで収まるであればドメインモデルでの実装は簡単。では、複数のエンティティにまたがるビジネスルール(以後複雑なビジネスルール)を実装する場合、どのように取り扱っていますか?多くの場合はビジネスル…

モデルの一般化のアイデア

モデルの一般化をどこですれば良いか、 クラス図などを眺めながら発見的に見つけたり、パターンを適用したりいろいろ考えられる。しかし、エンドユーザとの会話をしながらこのようなことは難しいかもしれない。そこでユーザとの会話で利用する台帳レベルでで…

ハンバーガショップの商品をモデリング(改訂)

いろいろ見直してみると、商品についてはカタログ(M1レベル)で、販売商品がインスタンス(M0レベル)で考えるのが良さそうなので再度改訂したいと思います。また、お買い上げの販売商品をもう少しベタベタなモデルにしてみました。 商品クラス 最初のモデ…

ベタベタなモデル

DDD

モデルを作成する時にベタベタでも構わないので、ビジネスで利用されている情報・ルールをそのまま写像したようなモデルを作成できればと考えている。これはモデルの要素を発見するのではなく、マップしていくイメージに近いものがある。(そういえば誰かが…

高負荷トランザクションでのドメインモデル

DDD

高負荷なトランザクションが予想される処理に対しては、パフォーマンス重視の処理方法が求められる。これには、以前DataMapperを最適化することでデータアクセスの効率を上げれることは書いた。更新系の場合、このデータアクセスの効率化以外にもうひとつ厄…

サンプルモデル

リアルなドメインモデルのサンプルって少ないな思っていたけど、リアルなERのモデルのサンプルも案外少ないですね。また、あっても単純化(手抜き)されているんだよな。説明用に単純化しているのはわかるけど、その除外しているところが知りたいんだよな。 …

開発標準は意思決定を減らす

開発標準やプロセスを導入する時に、「そんなものは役立たない」ということを意見は良くある。文書化など管理者向けのヘビーなものを押し付けれた場合、重い税金のように感じる。 しかし、開発標準にも多くのメリットがある。まずよく言われるのは大規模なチ…

IDが999のエンティティ

ダイアグラムを描いてみた。一時取引先IN購買がIDが999の取引先になる。 ついでに論理ERも描いてみた。冗長(JOINコストが影響する)と感じた場合は物理ERでサブタイプをまとめるなどすることになるが、購買と取引先の関係は元の論理ERのほうが分かり易いと…

エンティティの定義

DDD

手法によってエンティティの定義は違ってくるのだろうが、僕の利用している定義は以下のようなものだ。 ・ID(識別子)を持つ ・IDが同じであれば同じものとして扱う ・IDは不変である(IDは変わらない)IDの不変性についてはよく議論されているが、エンティ…