1

循環依存関係を含む問題を見つけて解決する必要があります。この問題では、関係するオブジェクト間に不透明なポインターを格納するか、オブジェクト間の関係を実現するために、より高いレベルで別のクラスを使用します。

そこで、銀行と口座の2つのクラスがあるという単純な問題を考えました。銀行には口座のリストが含まれており、口座には銀行へのポインターが含まれています。循環依存が達成されました。

しかし、私が満たさなければならない別の条件があります。それは、クラスとそれらの間の関係が互いに独立してテストできることを確認する必要があるということです。

Bankクラスは、アカウント間で資金を転送したり、資金を引き出したり追加したりするなど、アカウントで処理を行う関数を使用します。また、アカウントには、変数を編集する同様の関数が含まれています。

アカウントクラスのテストは、クラスをインスタンス化して関数をテストするのと同じくらい簡単ですが、依存関係から独立した別のクラスに依存するクラスをテストするにはどうすればよいですか?そして、2つのクラス間の関係をどのようにテストしますか?

循環依存に関する情報を見つけるのに苦労していますが、それ以外は避ける必要がありますが、大規模なプロジェクトでは避けるのが難しい場合があります。

4

2 に答える 2

0

重要な質問は、アカウントが所有している銀行を知る必要があるのはなぜですか? その情報を必要とする口座の操作は、銀行が関与する操作としてより適切に行われないと考えるのは困難です。たとえば、ある口座から別の口座に送金するには、通常、銀行 A が口座 AA からお金を取り除き、それを銀行 B に渡し、銀行 B が口座 BB に追加する必要があります。

おそらく、依存関係を取り除き、依存関係なしでは「不可能」なことを見つけ、何をしようとしているのかを再考し、アカウントが銀行に何かをするのではなく、銀行がアカウントで何かをするという観点からそれを再キャストする必要があるかもしれません。

于 2012-08-17T15:09:00.370 に答える
0

アカウントの簡素化されたバージョンを作成することを検討してください

例えば

class Account
{
   public:
      bool failDebit;
      bool Debit(unsigned int quid) { return failDebit;}
}

次に、両方のケースを最初にBank設定して、クラスをテストできます。次に、複数の関数を使用 failDebitするより複雑な関数がある場合は、より複雑にし、同様のアプローチを使用してすべての不測の事態についてクラスをテストできます。クラスは非常に単純で、戻り値を模倣するだけです。BankAccountBankAccount

: これは、考慮する必要があるさまざまな関数呼び出し間の依存関係である可能性があるため、少し単純化されています (しゃれは意図されていません)。

于 2012-08-17T15:13:22.480 に答える