web-dev-qa-db-ja.com

DDDは時間の無駄ですか?

グーグル「DDDはどのようなアプリケーションに適していますか?」私に次の答えを与えました:

おそらく、すべてのソフトウェアアプリケーションの95%が、「DDDの使用にはあまり適していない」カテゴリに分類されます。 ( 記事 を参照)

それで、すべての騒ぎは何ですか?!?

私が取り組んでいるアプリケーションは主にデータ中心ですが、適用するビジネスロジックとルールがいくつか含まれています。 DDD技術の適用を開始するのは時間の無駄でしょうか?従来のデータアクセス層、POCOのモデル、およびビジネスロジック層を使用したほうがよいでしょうか。または別の言い方をすれば、DDDに代わる健全な方法は何ですか?

52
JacobE

DDDがプロジェクトに役立つと考える多くの開発者は、自分の仕事はコードを書くことだと思っているという罠に陥ります。そうではありません。開発者の仕事は、ソフトウェアを介して問題を解決できるように機能を実現することです。これにより、コードの記述は開発者が行っていることの始まりではなく、終わりであるという結論になります。コードは、コードが実際に記述される前のプロセス全体の結果です。

DDDはコードを書くことではなく、優れたソフトウェアを入手するためのターンキーの10ステップのプロセスではありません。コードを書く前のプロセス全体についてです。問題の内容、参加者/参加者についての洞察を得ることが重要です。どの情報ストリームとこれらの要素がどのように見えるか、それらが互いにどのように関連しているかなど。実際、DDDの最も重要な部分はドメインの専門家と開発者の間の会話を誤解することなく可能にする言語を作成することです。。これは、エバンスが話している「ユビキタス言語」です。それは事実上、コードが書かれる前にプロセス全体を推測することをほとんど残さないプロセスにします、物事は明確で簡単です。 (それが目標です)。

「DDDは実際にどのように機能するのか」と「DDDを使用してコードを作成する方法の例を誰かに教えてもらえますか?」の問題。この種の質問をする人々はコードの記述に焦点を合わせているが、なぜ他のコードではなくそのコードを記述しているのかわからないという事実から、同様のことが実際に起こっています。 I.o.w。:DDDは、機能として何を書く必要があるのか​​、そしてその理由を発見することであることに気付いた場合、問題は解決します。どのようにそのコードを書いているか、それはあなた次第です。しかし、言われたように:あなたはそれまでにあなたが何を書かなければならないか、そしてその理由をすでに知っているので、それはもはや最大の問題ではありません。

110
Frans Bouma

申し訳ありませんが、DDDがFrans Boumaが言うように単なる考え方である場合、永続性の無知などは推奨されません。これは、他の人をやや下層階級の開発者として却下しています。

DDDに少なくともバイアスがあるPIは、アーキテクチャ上の選択です。それはもはや考え方ではありません;それはすでにあなたに提供されているものであり、ほとんどの場合、「すべてに適しているわけではない」という漠然とした警告が役に立たない。

しかし、PIを採用するかどうかを決定すること自体が課題であり、彼がこれに不安を感じている場合は、名前を誰か(「コーダー」)と呼ぶことはできません。

ERPパッケージを、MS Accessのようなインターフェイス(現在の合計、列の自動更新、100000レコードのページレススクロールを備えたグリッド)の至る所に配置します。明らかに、DDDアプローチが適しています。このアプリの使い方を考えてくれたのですが、PIがこれにどのように対処できるかについて、実際のコード例は言うまでもなく、証拠に裏付けられた説明を経て、本でもオンラインでも、何年も誰も見たことがありませんユビキタス配信したい人のための状況商用グレードのアプリとユーザーエクスペリエンス

これについて宗教的になりたくありません。 DDDとDALの支持者は過度に宗教的である傾向があり、一度噛まれたことはあるが心を開いている/された人々を追い払う可能性があります。多くの人は、実際の経験(つまり、考える)に立ち向かいたいだけであり、説教をサポートするために猫、車、および基本的な注文/注文アイテム(つまり、貧弱なコード)だけで提供されることはありません。

ご存知のように、5%が他のすべての95%よりも多くのお金を稼ぐことがあります-それがDDDが存在する理由です。

特定の複雑な大規模システム向けです。

9
Francis

非常によく似た質問があります: Web層がDALに直接アクセスすることを許可しますか?

私はすべてのプロジェクトにDDDを使用しています。小規模なアプリケーションでは、一部の概念が適用されませんが、サイズに関係なく、すべてのプロジェクトに多くの側面が適用できることがわかりました。

8
Chuck Conway
  • アプリは主にデータ中心であるため、おそらくアーキテクチャは主に従来型である可能性があります。

  • より多くのロジックと潜在的なドメインまたは値オブジェクトがある側面については、おそらくDDDのアイデアのいくつかを活用してコードを整理することができます。

  • 一般に、「適切な代替手段」は、物事を可能な限り単純に保ち、有用な場合はDDDの概念を使用し、記事がアドバイスするように物事を不必要に複雑にしないことです。

私は今、同様のプロジェクトを開始しています。これは、データ操作と、より多くのロジック/アルゴリズム主導の領域を組み合わせたものです。同様に、プロジェクトに利益をもたらすDDDの部分を取り上げたいと思いますが、逆効果になる可能性のある領域にそれを強制しようとはしません。

5
alchemical

DDDは、しばらくの間維持されるソフトウェアに関するものです。私にとってこれは、ドメインによって変化するアイデアを表現する必要があることを意味します。確かに、シンプルなアプリは、短い納期と短い実装時間に最適かもしれません。ただし、ソフトウェアを拡張する必要がある場合は、DDDの原則が非常に役立ちます。 DDDは前もって難しいかもしれませんが、ユビキタス言語と関心の分離のアイデアを理解すると、物事は簡単になり始めます。

5
Preet Sangha

記事をもう少し読むと、次のことがわかります。

DDDが適切なアプリケーションの5%にとって、それは非常に適切です。そのような状況では、DDDは非常にタフなナットを割るのに役立ちます。ここで、DDDは、マネージャーがあなたの机に向けたばかりの狼男の特効薬かもしれません。

それがそれについて大騒ぎする理由です。

5
Mnementh