Behavior-Driven Development(BDD)は、このブログ投稿のように次のように説明できます。
行動主導型開発(BDD)は、要件が具体的で誰もが何が起こっているかを理解できるほど具体的である限り、要件のアイデアを実装およびテスト済みの本番対応のコードに簡単かつ効果的に変換できるという立場をとります。これを行うには、すべての人(ビジネス関係者、アナリスト、開発者、テスター)が作業の範囲について共通の理解を持つように、要件を説明する方法が必要です。このことから、彼らは「完了」の一般的な定義に同意することができ、「それは私が要求したものではない」または「私はこの他のことについてあなたに話すのを忘れた」という二重の罠から逃れることができます。
したがって、ソフトウェアの要件を管理する方法に非常によく似ており、開発する必要があるものと、ソフトウェアが正しく開発されているかどうかの基準についての明確な概念が本当にあります。
一方、ドメイン駆動設計はモデリングの取り組みであり、ビジネスルールとユビキタス言語の構築に焦点を当てています。ドメイン駆動設計は、コードを構造化するためのhowに関する非常に優れたアイデアを提供し、複雑なドメインを(バインドされたコンテキストを使用して)小さな部分に分割するためのhow、およびhowエンティティや集計などを正確に定義することにより、コーディングで必要になる可能性のあるオブジェクトのさまざまな「タイプ」を理解します。
ソフトウェアの要件に対処する方法について、DDDが(私が知る限り)何かを教えてくれても、あまり伝えていないことがわかりました。
要件組織とwhatの概念をつなぐ方法を開発する必要があります。実際にそれを開発するには、DDDが有用になるまで、DDDは知らないようです。
DDDは、ビジネス用語を採用し、「ドメインが何であり、何が必要かを本当に理解する」というユビキタス言語の構築に重点を置いているため、BDDとDDDはうまく連携できるように思えました。
しかし、これは経験の問題です。試した人だけが結果を知ることができます。
ここでの私の質問は、BDDとDDDの両方を一緒に使用しようとした人はいますか?その時一緒に使うのは正しいことですか?そうでない場合、なぜ彼らは直感に反していないのですか?
@ robert-harveyがすでに指摘したように、ユビキタス言語は理想的には一般的な拘束力です。
DDDは、その言語での語彙の定義に焦点を合わせています。アクター、エンティティ、操作など。DDDの重要な部分は、実装者とドメイン間の通信だけでなく、コードにユビキタス言語も明確に見られることです。専門家。したがって、DDDの極端な見方は非常に静的です。つまり、完成したシステム全体を説明します。
BDDは、ユーザーストーリーまたはシナリオの定義に重点を置いています。これは増分プロセスと密接に関連していますが、静的と見なすこともできます。これは、ユーザーと完成したシステムとの間のすべての相互作用を説明します。
DDDおよびBDD can重複なしで適用:BDDユーザーストーリーは、UIボキャブラリー(ボタン、ラベルなど)のみを使用して記述でき、DDDは相互作用について言及することを回避できます。
しかし、理想的にはこれら2つが重なり合い、連携します。BDDストーリーは、ユビキタス言語が豊富で、ドメインの概念を使用してユーザーエクスペリエンスを説明します。そしてDDDは、ストーリーがコード内で見つかるようにします。