短い答え:私は、永続的で豊かなドメインオブジェクトが好きです。
長い答え:
私は春と休止状態を使用して〜500K LOCかなり大規模なシステムに取り組んで10年近く。当初、私たちはHibernateをあまり信頼していなかったため、「トランザクションスクリプト」(Fowler参照)アプローチから始めました。しかし、短期間で私たちはHibernateを信頼するようになりました。私はずっと前のOOでの以前のトレーニングのために、ドメイン駆動設計と組み合わせた一時的な永続性を大いに信じていました。我々は基本的に私たちのシステムをODBMS(小さな漏れがたくさんあります:-)で支えられていると考えるようになりました。
DDDという本はまだ書かれていないので私は私たちのアーキテクチャを「ドメインカーネル」と呼んだ。これはHibernateの初期の段階であったため、ドメインモデルはアノテーションで汚染されていませんでした。永続性の別個の懸念は、XMLマッピングでは別々に保たれました。
もう一度、時間の経過とともに、動作をドメインレイヤーにプッシュすることができました。私たちは、コンパイル時の依存関係で強制されていた、かなり伝統的なコントローラ - >サービス - >ドメイン - ドメイン階層化スキームを持っていました。私が時間をかけて観測したのは、このモデルが計画セットアップ、取引、会計、コンプライアンステスト、販売、ブランディングなど、401(k)計画管理の非常に複雑な領域のあらゆる側面を代表するシステムにとって非常にうまく機能していたことです。 (比較的)透明な「魔法の」持続性を持つ豊富なドメインモデルは、ドメインモデルの既存の機能に関して新しい機能を構築する上で重要でした。
私たちのサービス層は、テクニカルサービス(電子メール、ファイルI/O、キューイングなど)間のやりとりだけを調整し、必要に応じてドメインパッケージを拡張するのに役立ちました。サービス層はまた、(Springを介して)トランザクション境界を定義しました。サービスは受信したDTOまたはプリミティブのみを受信または送信しました。 DRYの中断として、多くの人がそれを嫌いますが、サービスインターフェイスとそれらを使用するコードを定義する際には正直な気がします。後で遠隔のものにも非常に簡単になりました。
このアプローチによって、かなり小さなチーム(私たちはスクラムチームでした)で高品質のソフトウェアを構築することができました。
私は永続的なドメインオブジェクトを信じていると考えています。私の話が助けてくれるかどうかわからないが、分かち合いたい。
このプレゼンテーションを参照してください。http://www.infoq.com/presentations/Clean-Model-Tim-McCarthy – MikeSW
ありがとう、これは素晴らしいプレゼンテーションになります!今すぐ見る... – HolySamosa