2009-07-20 16 views
1

asp.netを使用してrentacarの予約サイトを設計しようとしています。アプリケーションがスケールアップされるという変更があり、DDDを使用してメンテナンスとパフォーマンスを助けてくれるのではないかと思っていました。私は、データセットとSPまたはDDDを使用して設計された新しい類似サイトがあるかどうか疑問に思っていました。だからDDDへの私の友人や古いファッションに行く?DDDまたは古いファッション?

+5

誰もあなたは両方を行うことはできないと言いますか? DDDは、ビジネスロジック、すなわち/ domain /の設計に関するものです。どのようにビジネスロジックを設計しても、データセットとSPはそれを考慮に入れるべきではありません。 –

+0

通常、dddはO/Rマッピングツールの上にあります。確かに両方を行うことができますが、nhibernateのような成熟したo/rマッパーが、カスタムマッパーが行うよりもうまく仕事をすると確信しています。それじゃない? –

答えて

3

あなたのように、私は新しいプロジェクトを作成しています。私はDDDの方法を選択しました。これは "古いファッション"の方が良い(デカップリングされたテスト容易性)例えばでもstackoverflow.com

に...私はいくつかの質問に苦しんだし、常に答えを見つけることができないことを認めなければ、集約ルートの概念が ASP.NET MVCのウェブサイトの設計対(マスター/詳細関係 - 作成/更新)。モデルバインディングとエンティティオブジェクトやバリューオブジェクトなどの複雑なオブジェクトグラフは、の最新のコンセプトであり、の指導者(DDDのエリックエヴァンスのような)もすべての回答を知らない。

最後に、私はコミュニティプロジェクトS#arp Architectureが学習のための非常に良い場所だと思います。asking questions

+0

MVCパターンはプレゼンテーションです。それはドメインモデルから切り離されるべきです。あなたのドメインモデルで正しいdatetime形式のhttp-posted文字列を検証している場合は、間違っています。ページングに関連するものをドメインモデルに追加している場合は、それも間違っています。 –

+0

通常、model-> view_modelの方向にのみバインドします(Automapperはそのための素晴らしいツールです)。場合によっては、ビュー・モデルはまったく必要ありません(ドメイン・オブジェクトがフラットでダム・データ・バッグの場合)。 –

+0

ビューモデル - >ドメインモデルの方向にバインドする場合、解決しようとしている問題が余分に簡単でない場合(プロシージャコードが短く理解し易い場合を除く)、プロシージャコードが悪い場合にデザインを駆動します。オブジェクト指向の全体的なポイントは、責任を「下にある」オブジェクトに委任することによって複雑さを軽減することです。だから代わりにあなたのドメインオブジェクトのメソッドを引数で渡して呼び出す必要があります。 –

-2

私の意見では、DDDはASP.NET MVCで構築された大規模なWebサイトに適しています。しかし、私は、ASP.NET MVCプラットフォームは今のところまだ比較的未成熟であることに注意します。 DDDを使用することを選択した場合は、ASP.NET MVC、TDD、およびリポジトリパターンをテクノロジの組み合わせとして検討することをお勧めします。標準のWebFormを使用しているなら、私はDDDを提案しません。あなたがSPを使用しているなら、GetAll、GetByID、Insert、Update、Delete ...に依存しているのでリポジトリ・パターンを使用できないので、DDDは本当に素晴らしいことではありませんし、IQueryableを使用してLINQで実装されたフィルタでこれらを拡張します...あなたがSPを使用している場合は、この構造の全体的な利点を取り消す必要があります。ちょうど私の見解。

+0

実際、私はnhibernateの経験はほとんどなく、私にとっては素晴らしい仕事です。私はちょうど立つことが予想される新しいプロジェクトを設計する上で、良いパフォーマンスとスケーラビリティを持ち、維持管理が容易になると思っています。だから私は日産ファンに同意しますが、私は現代デザインにもっと多くの考えを伝えたいと思っています。 –

+1

私はNHibernateは非常に成熟した解決策だと思いますが、リポジトリパターンと組み合わせてEntity Frameworkに非常に満足しています。これはMVCと共に、TDDは.NETプラットフォーム上の近代的なアーキテクチャの尖塔です。 –

0

はい、DDDでもうまく機能するサイトを構築することは可能です。 DDDの目標は、ドメインをあなたの運転モデル​​にすることです。現在我々のプロジェクトでは、ドメインのオブジェクトリレーショナルマッパーのontopとしてNHibernateを使用しています。これは非常にうまくいっています。特に、NHibernateは第2レベルのキャッシュのようなパフォーマンスを向上させるためにさまざまなことをサポートしています。 10000人以上のユーザーのためにデータベースからロードする必要があるオブジェクトのリストは、1つのクエリを必要とし、異なるセッションは同じmemcacheを共有します。したがって、ORMを使用する場合は、キャッシュの利点を活用してください。

ソフトウェアのリリースサイクルごとに、ソフトウェア(ドメインモデル)を更新するだけでなく、ドメインモデルが変更されたときにデータベースを更新する必要があることも考慮する必要があります。ただし、これはStoredProcsを更新する必要はありません。

BTW:DDDとORMを使用している場合でも、SPを使用する方がよいという問題があります。例:新しい注文番号を作成する。 10000人以上のユーザーがあなたのウェブサイトにいて、複数のユーザーが新しい注文を作成したい場合は、すべての注文番号が一意にとどまるようにする必要があります。私たちは、SPがORMの上にこうした種類のロックをかけることを好みました。

DDDを試してみる機会があれば、ぜひお試しください。がんばろう。

0

他の読者のお勧めのとおり、Greg YoungとUdi Dahanのコマンド/クエリ分離についてのアドバイスは十分に推奨できません。

2

"DDDを使用するとメンテナンスとパフォーマンスがどうなるか疑問に思っています。"

多くのことが役立ちます。TDD/BDD、IoC、NHibernate(設定用FluentNHibernate)のような良いOR/M ...

DDDは、きれいでシンプルでメンテナンス可能なソフトウェアを作成する上での単なる柱です。しかし、それはパズルの唯一の部分です。あなたがちょうどマネージャクラスで貧血ドメインオブジェクトの束を作成し、データアクセスのためにストアドプロシージャを使用し、依存性注入を忘れるならば、DDDはひどく間違って行くことができます...

DDDがあなたに与えることができるものはきれいでクリアですコード:旧西部の手続き型スパゲッティコードがなくなり、自分のコードベースを移動するのがより簡単になります。リファクタリングは起こりうる(そして恐ろしいことではない)。

私は決して別の「古い学校」のコードベースに触れることはありません。私は確かにそうした新しいプロジェクトを開始しません。私にグリーンフィールドプロジェクトを与え、私はReSharper、NHibernate、FluentNHibernate、StructureMapを求めます。そしてそれは私が必要とするすべてです....