DDD

ドメインモデル駆動開発をやってみる(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を作成する手順を試してみます。どこまでできるか?ではありますがチャレンジしてみます。シナリオは伝言メモでトライします。 ドメインモデルの作成 事前に分析レベルのクラス図があるので、これを元に…

ドメインモデル駆動開発

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を利用してドメインモデルのアプリケーションを作成するとどんな感じになるか気になっている。 そこで、実際にドメインモデルのアプリケーションを作成して評価してみる。題材はいつものハンバーガショップのモ…

遅延ロードを避ける

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

ActiveRecordはやっぱりActive Recordなのか

DDD

RoRで採用されているActiveRecord(AR)を利用してドメインモデルを作成してみました。 シナリオはハンバーガショップモデルを利用し、基本的な部分を実装してみました。 感想としてはARはやはりActive Recordであり、リッチなドメインモデルを作成するには向…

ビジネスロジックのプロジェクト構造

Project Structure - By Artifact or Business Logic?普通2番目(ユースケース/機能ごと)を採用すると思うけど、1番目(コンポーネントタイプごと)を採用しているケースも案外あるのではないかな。 レイヤ構造または機能構造の優先順位でプロジェクトや…

実装技術としてのドメインモデル

DDD

ドメインモデルの良いところは、実際のビジネス構造と実装のギャップを小さくすることができる点だと考えています。逆に言うと、ドメインモデルを実装するためにはビジネス構造の分析は必須で、ビジネス構造の分析なしに(良質の)ドメインモデルで実装する…

商品モデルに新しい価格体系を含めるような変更

DDD

−第 11 回− 定食をモデリングするの総額割引モデルを見て、以前作成したサンプル ハンバーガショップのモデルに適用したらどうなるのかなとふと思った。 商品の価格モデル変更はシステム上のインパクトが普通に考えると大変なことになるのだが、価格モデルを…

ハンバーガショップ価格モデルの改訂

DDD

とりあえず"SSセット"なる"ポテトSと+ドリンクS+各種ハンバーガ"を"150円+ハンバーガ本体価格"で提供できるようにしてみました。もとのモデルでもデータを工夫すれば同じようなことは可能ですが、やはり現実のビジネス構造をそのまま表現できるほうが良い…

ついでに伝言メモのモデリングにチャレンジ

−第 12 回− 伝言メモをモデリングするにチャレンジ 台帳の作成 モデルの前提はある程度許容されているようなので、電話通知機能を利用した伝言メモシステムの構築を前提に、既存の社内や取引先の情報を利用するようなモデルを作成してみます。オブジェクト図…

Domain-Driven Designのエッセンス

DDD

オブジェクト広場を久し振りに見てみると、なんとDDDの紹介記事が。素晴らしい。

クレジット請求

とある雑誌で上がっていたサンプルをもとにモデリングにチャレンジ。 概念モデル クラス図 分析モデル 請求クラス 台帳を作成・分析してクラス図を作成 分析モデル カードクラス 口座をトップレベルのエンティティとしてはじめはとらえていましたが、契約の…

ドメインモデル=OO?

DDD

ドメインモデル=OOという考えをする人たちがいるが、この考えには違和感がある。 問題領域(ドメイン)のモデルを実装していくのがドメインモデルと基本的な考えと思っているからで、OO(カプセル化や継承などなど)を利用することは必須ではないと思ってい…

ドメインモデルに対する日米の温度差

DDD

僕もここ数年同じようなことを感じていました。 あと、日米の温度差というか気になっている差としてはISVが少ない、ユーザIT部門が組織が小さい、CIOがいないなどが感じるかな。日本はSIerが強すぎるんだろうな。最後に、DDD・PoEAAが発表されてから数年たっ…

階層化された構造制約

DDD

前の「構造制約を満たしていると確認されていない状態」については、もう少しうまく取り扱えないかなと考えてみました。 そこで思いついたのが、「あるモデルにおいて1つの固定的な構造制約を満たしているかどうか」と考えるよりは、「構造制約にも階層があ…