2008年4月30日水曜日

MSに染まらない.NET開発 : 書籍「ドメイン駆動」

読み終わったので。
ドメイン駆動

ドメイン駆動

  • 作者: Jimmy Nilsson, 尾島良司, 株式会社ロングテール長尾高弘
  • 出版社/メーカー: 翔泳社
  • 発売日: 2008/03/20
  • メディア: 大型本

マインドマップは「続きを読む」で……邦題は「ドメイン駆動」と言い切っちゃってて、Evansの"Domain-Driven Design"と区別がつきにくいが、原題は"Applying Domain-Driven Design and Patterns: With Examples in C# and .NET"ということで、.NETにおけるドメイン駆動設計の進め方を本にしたもの。
厚さはそれなりなんだけど、思ったより読みづらくて、読み進めながらイライライライラ。読み終わってから気づいたんだけど、この本は読者に対してこれから進んでいく方向というか道筋みたいなものをほとんど提示しない。とりあえず行き当たりばったりで話を進めていくのだ。そして問題にぶつかったところでいくつかの選択肢を提示し、1つを選んでまた進むというスタイルで設計を洗練させていく。まあそれがYAGNIということなのかもしれないし、そのような進め方を読者に見せたくてわざとやっているのかもしれない。でも、ドメインモデルを洗練させていくところに図がほとんどなくて、提示されるソースコードも断片しかないんだぜ?
ただ、あらかじめどこに進もうとしているのかを分かっていれば、別段難しい話はでてこないし、実践的な内容なので、参考になるだろう。特に4, 5, 6, 7章と11章は面白かった。ポイントは「他の何者にも依存しない、純粋なドメインモデル」だ。最終ゴールが見えていて、各章での進む先が分かっていれば、別にC#や,NETのことを知らなくても楽しめると思う。
最後に、この本を読もうかどうしようか迷っている人のために、各章の簡単なまとめを書いてみた。各章のもっと細かい内容についても説明(省略されました。続きを読むにはわっふるわっふると書き込んでください)
thumbnail

  • hideADDDP
    • hide第 I 部 背景
      • hide第1章 尊重すべき価値
        • leaf先取りとYAGNI、アーキテクチャ先行とTDDのバランスが重要。
        • leafDDD+TDD+リファクタリング。RDBMSを使うならData Mapper。
        • leafCIツールも使おう。
        • leaf運用に必要な機能も忘れずに。
      • hide第2章 パターン入門
        • leafパターンは重要だけど万能じゃないよ。
        • leafGoF, POSA, PoEAA, DDDを紹介するよ。
        • leafパターンを使わない場合と使った場合の両方のサンプルコード。
      • hide第3章 TDDとリファクタリング
        • leafTDDの作業の流れをデモ。
        • leafモックやスタブに置き換えるデモ。
        • leafリファクタリングのデモ。
    • hide第 II 部 DDDの応用
      • hide第4章 新しいデフォルトアーキテクチャ
        • leafレイヤ分割の方針:ドメイン層が他に依存しないようにする。
        • leaf発注処理をサンプルにする。
        • leafUMLでスケッチしながら要件の理解を深め、アーキテクチャの選択をする。
        • leafここで考えた初期ドメインモデルをたたき台にするよ。
      • hide第5章 DDDの手法で前進する
        • leafTDDでドメインモデルを改良していく。
        • leaf設計を変えるときはテストコードを変えることもいとわない。
        • leafプロパティとかインスタンス化とかリポジトリからの取得とか一部のビジネスロジックとか。
      • hide第6章 インフラのための準備
        • leafPOJOとかPOCOとか、まとめてPI (Persistence Ignorance : 永続知らズ) と呼ぶよ。
        • leafPI原理主義。永続化インフラに依存するのはアノテーションですら嫌だ。
        • leafドメインモデル内のリポジトリは、IWorkspaceを実装するデータアクセスクラスを呼び出すことにする。
        • leafUnit Of Workパターンで行こう。
        • leafテストプログラムを修正。
        • leafQuery Objectも使いたい。
      • hide第7章 ルールを機能させる
        • leafビジネスルールについて詳しくは本を読んでね。
        • leafルールをチェックするインスタンスメソッドをたたき台にして改良していく。
        • leafドメインロジックのルールを実装してみる。
        • leaf永続化のためのルールもインフラに依存しないように実装してみる。
    • hide第 III 部 PoEAAの応用
      • hide第8章 永続記憶のためのインフラ
        • leafドメインモデルは極力インフラに依存しないようにする。
        • leafRDBMSを使うのが現実解。
        • leaf気の利いたSQLとか、強力なクエリとか、同時実行制御とかもできて欲しい。
        • leafO/Rマッパで楽したい。
        • leafスタイルや機能でインフラを分類してみる。
        • leafPoEAAのパターンでもインフラを分類できる。
      • hide第9章 NHibernateを導入する
        • leafHibernateの.NET実装。コーディングサンプルも紹介するよ。
        • leaf前章で挙げた要件はおおむね満たしている。
        • leaf前章で挙げた分類に従ってNHibernateの特徴を紹介するよ。
        • leafでは発注処理サンプルモデルに実際に組み込んでみよう。
    • hide第 IV 部 次は何か
      • hide第10章 これからの設計テクニック
        • leafいくつかの機能をまとめてパーティション分割して、それぞれ別のモデルを使うのもあり。
        • leafSOAについて。片方向非同期メッセージングは便利だよ。
        • leafDIについて。.NETでの実装例と、Service Locatorとの比較。
        • leafAOPについて。Spring.NETを用いた.NETでの実装例。
      • hide第11章 UIにフォーカス
        • leafUIは別レイヤにしよう。
        • leafMVCについて。分離してテストしやすくするサンプル。
        • leaf同様のことをASP.NET Webアプリケーションで試すサンプル。
        • leafプレゼンテーションモデルの検討とドメインモデルとの対応の付け方。
    • hide第 V 部 付録
      • hide付録 A 他のドメインモデルスタイル
        • leaf他の人が考えた、少し異なるアーキテクチャの方針をいくつか。
      • hide付録 B 論じたパターンのカタログ
        • leafGoF, POSA, PoEAA, PoEAA2, DDD, CoreJ2EE, 他にもいくつか。