2007-08-01から1ヶ月間の記事一覧

ドメインモデル駆動開発をやってみる(5)

DDD

画面を作成する ユースケースコントローラまで作成できたので画面を作ることにします。シナリオは伝言の確認・登録、従業員マスタ・メンテをターゲットにします。自分宛ての伝言一覧 新しい伝言の登録 従業員マスタ・メンテ リポジトリの改訂 マスタ・メンテ…

状態変化するエンティティの管理はどこですべきか?

DDD

エンティティ自体が状態値をもつのが第一候補でしょうが、アプリケーションやビジネスフローのコンテキストで管理したい場合もあります。前者の例としては図書システムの貸出中などでエンティティが本質的にもつ状態値で、後者であればデータ編集処理におけ…

ドメインモデル駆動開発をやってみる(4)

DDD

ユースケースコントローラのサービス化 前回ドメインモデルを実行する実装非依存の抽象化エンジンを作成しました。今回はこのアイデアをさらに拡張して、ユースケースコントローラをサービス化して利用するシナリオを考えてみます。目標となるシナリオは、登…

Improving application design with a rich domain model

DDD

Transaction ScriptとDomain modelの比較、DDDのパターンやリファクタリングなどを簡潔に説明しています。GOOD!!

ドメインモデル駆動開発をやってみる(3)

DDD

リポジトリ リポジトリをモデルに導入します。まずはインタフェースを定義します。最終的にはデータベースから読み出しリポジトリの作成になりますが、今回はデータベースの導入をできるだけ遅延して、後で実装クラスを入れ替えるようにしておきます。まずは…

ドメインモデル駆動開発をやってみる(2)

ドメインモデルと言えるかは?の点はありますが、前回の伝言メモのユースケースをモデル化して実装してみます。 ユースケースのモデル化 ユースケースをモデル化する方法として直ぐに思いつくのが、アクティビティ図やフローチャートで、.NETであればWFを使…

ドメインモデル駆動開発をやってみる(1)

DDD

ドメインモデルを先に作って、次に画面周り、最後にDBを作成する手順を試してみます。どこまでできるか?ではありますがチャレンジしてみます。シナリオは伝言メモでトライします。 ドメインモデルの作成 事前に分析レベルのクラス図があるので、これを元に…

テスト代替の連続性について検討する

テストをするために利用するコード「テスト代替(Test Doubles)」には様々な形態があり連続して利用されるという点を説明した良い記事です。Mocks Aren't Stubsと併せて読むのがお勧め。 ダミー ダミーは必要なパラメータを埋めることだけを目的とする。実…

ドメインモデル駆動開発

DDD

Plain Objectで実行可能なドメインモデルをまず作成して、次にドメインモデルを永続化するためのデータベース・データマッパーを作成する開発シナリオって案外良いかもしれない。 データベースのスキーマ設計(決定)が遅延できるというか、画面実装と同じレ…

ドメインモデルをLINQで構築する

まだまだLINQについて調べたいことはたくさんあるが、とりあえず、いくつかのドメインモデルのパターンを作成したので振り返りまとめとします。 ORMとしてLINQ to SQL 一言でいってよくできたORMフレームワークです。 Expression TreeをSQLに変換するアイデ…

ドメインモデルをLINQで構築する(その9)

前回に引き続き帳票シナリオです。前回アドホックな処理をリファクタリングを通して汎用的なメソッドを見つけ出し共通化を促進しました。しかし、このメソッドにはデータアクセスの処理が残っていますので、まずはデータアクセスを切り離し、さらにデータア…

ドメインモデルをLINQで構築する(その8)

帳票シナリオ 今回からは、LOBアプリの帳票でよく出てくる生情報をサマリーして様々な指標を算出するシナリオを考えていきます。具体的には店舗ごとの売上指標を表示するなシナリオを目標にドメインモデルを構築していきます。 アドホックな処理 最初の実装…

ドメインモデルをLINQで構築する(その7)

今回は更新系のSQL文のカスタマイズにチャレンジします。 オブジェクトのトラッキング LINQ to SQLには検索したオブジェクトの変更管理を行う仕組みあり、dbmlファイルで作成したコードにも組み込まれます。 [Table(Name="dbo.Shops")] public partial class…

ドメインモデルをLINQで構築する(その6)

今回はお買い上げの様々なバリエーションを実装していきます。 オプション商品の指定 オプションを持つ商品をお買い上げするシナリオです。 [TestMethod] public void TestSetOrder() { using (var db = new BurgerShopDataContext()) { db.Log = Console.Ou…

ドメインモデルをLINQで構築する(その5)

検証ロジック 前回空のお買い上げ(Order)を登録するシナリオを作成しましたが、実際に空のお買い上げを登録しては問題になります。お買い上げを登録する場合には検証が行い問題が無いか確認する必要があります。 テストケースを書き直し空のお買い上げの場合…

ドメインモデルをLINQで構築する(その4)

前回までは参照シナリオを取り扱っていましたが今回から数回に分けてお買い上げ(Order)の更新シナリオを取り扱います。 お買い上げ(Order)ドメインモデル まずは、今までと同じようにLINQ to SQLのマッピング情報であるdbmlを作成します。ただし、今までと…

ドメインモデルをLINQで構築する(その3)

データアクセスの最適化 前回は商品(Product)のオプション一覧をドメインモデル作成しました。目標としていたテストケースをパスできたのですがその時にSELECT文が17回発行されていました。今回はこのSELECT文の実行を削減というか調整したいと思います。…

ドメインモデルをLINQで構築する(その2)

商品(Product)ドメインモデル 今回は商品(Product)のドメインモデルを作成します。まずは、前回と同様にLINQ to SQLでアクセスするためのdbmlファイルを作成します。今回は複数のテーブルから構成される点や再帰構造や継承構造があるので前回よりも複雑に…

ドメインモデルをLINQで構築する(その1)

LINQの使いどころはいろいろあるだろうが、LINQを利用してドメインモデルのアプリケーションを作成するとどんな感じになるか気になっている。 そこで、実際にドメインモデルのアプリケーションを作成して評価してみる。題材はいつものハンバーガショップのモ…

LINQで動的な式を作成する方法

Dynamically building LINQ expression predicates 動的にExpression Treeを作成するサンプルは今までもいくつかあったのですが、上記の方法はシンプルなのに十分に役立ちそうなヘルパーでGOODですね。LINQで動的な検索条件を簡単に作成できなければ、現在利…