Microsoft Spain - Domain Oriented N-Layered .NET 4.0 Sample App

.NETのDDDのサンプルで、Code-FirstとMVVMで作っているようです。ざっと見た感じですが、素晴らしい!!
内容を見てみると、DDDのEntityやValueObject、(Domain)Service、その他Specificationなど多くのパターンについて実装と解説がついています。ドキュメントの量もそれなりに多いですがドメイン層の実装としては素直な感じ。少し気になったのがDTOのところ、DTO導入のメリット・デメリットは承知の上での導入のようだが個人的には好みではないためです*1。ただ、DTO導入の意味づけとして以下のように記述されていてドメイン層のエンティティとの結合度の低下を挙げている点が良いです。

to decouple clients/consumers from the Domain Model, and ultimately from the Domain Entities, the most common option is to use DTOs (Data Transfer Objects).

ドメインモデル、最終的にはドメインのエンティティからクライアントや利用側を分離するために最も一般的なオプションとしてDTOを使います

エンティティをプレゼンテーションで公開する場合、エンティティにレイヤー依存する処理等があると問題になるなどがあるが、このような制約に対する対策として目的が合理的に感じたので、エンティティというかドメイン層をwell−Defined的な世界にしたい僕はこの解釈は悪くないです。

あとはコードとして気になったのがWeakEventHandlerManagerの実装。少し調べてみるとPrismで使われていたようだが気が付かず、WeakEventManagerよりも簡単に実装できそうでお手軽そう。また、Code FirstではValue Objectをイミュータブルで実装できそうです。ドキュメントにも記載されていますが、デフォルトコンストラクタとprivateのセッターがあればOKのようで、Adddressがその実装コードのようです。

その他も気になるところが盛り沢山なので、いろいろドキュメントやコードを見てみようと思います。

*1:DTOを導入すると同じようなコードが増えるのが嫌。DRYじゃない