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

ドメインモデル駆動開発をやってみる(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で動的な検索条件を簡単に作成できなければ、現在利…

遅延ロードを避ける

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

Design Principles and Code Ownership

いままでFowlerが言ってきたことではあるが、いいこと書いてるね。すごく共感する。

IronRubyプレアルファが出ました

出ましたね。 関連記事 First Look at IronRuby

ActiveRecordはやっぱりActive Recordなのか

DDD

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

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

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

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

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

Linq関連の記事のメモ

LinqをORMとして見た時の最適化(カスタマイズ)ってできるのか興味があるので少しLinqの実装を調査し始めました。 Linqも最近はいろいろ情報がでてきてなんとなくイメージがわかるのですがまだまだクリアになっていません。特にクエリ式(Query Expression…

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

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

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

DDD

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

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

DDD

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

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

DDD

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

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

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

Domain-Driven Designのエッセンス

DDD

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

クレジット請求

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

ASP.NET Ajaxを利用したWebPartのサンプル

RSSリーダをASP.NET Ajaxのクライアントサイドフレームワークで作成しWebPart化するシナリオです。 クライアントサイドでコントロールを作成するのはASP.NET Ajaxの知識範囲でOK。WebPart化する場合のポイントはScriptManagerの取扱い方法に工夫が必要な程度…

ドメインモデル=OO?

DDD

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