テスト駆動開発(TDD)は設計ではありません。これは、設計に影響を与える要件です。スレッドセーフである必要があるかのように、それは設計ではありません。繰り返しますが、これは設計に影響を与える要件です。
他の設計上の懸念事項をすべて喜んで無視し、TDDを忠実に守るなら、コードががらくたになったときにTDDを非難しないでください。それはテスト可能ながらくたですが、それはがらくたになります。
テスト可能ながらくたの良い点の1つは、それがリファクタリング可能ながらくたであるということです。必要なときだけ空想になります。他の人はこれを嫌い、TDDを非難します。いいえ、これはあなたのしていることです。
ドメイン駆動設計(DDD)は、TDDの赤緑のリファクタリングサイクルの前に行うことです。
DDDは、システムの詳細をほとんど知らないドメインエキスパートがシステムの制御方法を理解できるように、コード内にスペースを作成して保存する取り組みです。これは、問題の領域を抽象化してモデリングすることにより、使い慣れた方法で行われます。
DDDシステムには、次のようなアーキテクチャがあります。

このDDDアーキテクチャには多くの名前があります: Clean、Onion、Hexagonalなど
多くの人がこの設計を見たときに見られる切断を以下に示します。これは具体的ではありません。私はこの設計に従うことができますが、ここで図に示されているものを書いたことはありません。ユースケースオブジェクトまたはエンティティクラスが必要だと主張する人もいます。これらは、誰とどのように話すことができるかを示すルールのセットです。
それでおしまい。この設計のルールに従うと、あなたの小さな心をTDDできます。TDDはあなたが誰と話しているかを気にしません。ボタンをクリックするだけで、何かを行うすべての機能が動作するかどうかを確認できます。何かが壊れているわけではありません。何が壊れているかを正確に伝えます。
まだ曖昧ですか?見てControler
- Use Case Interactor
- Presenter
右下隅の図。以下は、相互に通信する3つの具体的なものです。確かにこれはDDDですが、ここでTDDをどのように追加しますか?コンクリートの物をモックするだけです。プレゼンターは情報を受信する必要があります。PresenterMock
クラスは、あなたがそれを得るために期待したものなってきたことを確認する良い方法だろう。を渡してUse Case Interactor
、あたかもあなたがそうであるかのようにPresenterMock
運転するUse Case Interactor
と、モックはあなたが期待するものを手に入れたかどうかを教えてくれるので、Controller
ユニットテストをする良い方法がありますUse Case Interactor
。
よく見てください。TDDは満足しており、DDDの設計に手を加える必要はありませんでした。どうしてこうなりました?十分に分離された設計から始めました。
TDDを使用して(単なるD開発ではなく)デザインを推進すると、それに費やした労力を反映したデザインが得られます。それでいいなら。しかし、それはTDDが意図したものではありませんでした。これが最終的に欠けることは、確かにTDDのせいではありません。
TDDは設計に関するものではありません。TDDを使用するために設計を変更する必要がある場合、テストよりも大きな問題があります。