-1

適切な単体テストを行うには、割り当てられたクラスが必要です。

これは、テスト クラスが割り当てられていることを意味しますが、クラスごとにより多くの機能を備えた少数のクラスと比較して、テスト クラスがより単純になり、変更ごとにヒットするクラスが少なくなるため、実際にはそれらを維持するために多くの時間を費やす必要はありません。

クラスの割り当てが (おそらく DI を使用して) 実行されているアプリケーションに、より少なくより太いクラスのアプリケーションと比較して、実際のパフォーマンス ヒットはありますか?

編集

明確にさせてください。

私はアルゴリズムについて話しているのではなく、一般的に、クラスの割り当てがパフォーマンスに影響を与えるかどうか疑問に思っていました。

クラスの割り当ては、クラスごとに1つのパブリックメソッドと、クラスに抽出されたほとんどすべてのプライベートメソッドを考えていると思いますか。

これは非常に極端ですが、仮説として、何が問題になるのでしょうか?

4

3 に答える 3

2

今感じているのは「時期尚早の最適化」と呼ばれています。決して起こらないかもしれない問題を解決することへの恐れ/衝動。

誰もが使用するため、関連するすべてのコードが完全に最適化されているため、一般的にクラスの読み込みは遅くありません。

また、クラスの読み込みにテストの実行ごとに数秒かかる場合(=テストごとではなく、実行全体)、テストは通常​​はるかに長く実行されるため、問題にはなりません(間違った場合は桁違いに長くなります)。

それが最後の最悪の問題であるメンテナンスを残します。記述されたコードの各行は、コードを保守するときに少なくとも無視する必要がある行です。コードを無視するだけでも手間がかかります。したがって、コードは少ない方が常に優れています。

ただし、ここには下限があります。必要なすべての機能をエンコードするには、最小限のコードが必要です。また、必要な機能の絶対最小値に到達しようとすると、多くの労力がかかるため、ほとんどのコードは(ある程度)近づくだけです。

残念ながら、それでも全体像ではありません。適切に記述されたコードがある場合は、それを確認する必要はありません。問題なく機能します。したがって、適切に記述されたコードの保守コストは、たとえば、コンパクトで高速だが理解できないコードよりもはるかに低くなります。

つまり、理解しやすいコードの方が安いということです。つまり、それを独立したビットに分割すると、より安価になります。それは、 OOPの欠陥のために、クラスの爆発につながります。

残念ながら、私たちの知力は限られています。これは、機能があまりにも多くの場所に分散していると、全体像を把握するのが難しくなることを意味します。これは、コードが正確に適切な場所でカットされていない場合(そしてほとんどの場合そうではない場合)に加えて、長期間にわたって完璧なコードを作成できない(品質が変化する)という事実によってさらに悪化します。

結論:クラスが多すぎたり少なすぎたりする可能性があります。外から見分ける方法はありません。それはあなた/あなたのチームがどれだけ優れているか、あなたの問題がどれほど複雑であるか、プロジェクトがどれほど大きいかなどに依存します。良い指標はあなたのバグデータベースと経験における未解決のバグの数です。

于 2013-01-21T13:43:40.847 に答える
2

編集:パフォーマンスヒットがあるかどうかを尋ねています。それは明らかに間違った質問です。パフォーマンスへの影響は常にありますが、コンテキスト内ではごくわずかです。そうでない場合でも、クロック速度が頭打ちになった現在でも、ほとんどの場合、パフォーマンスはソフトウェアよりもハードウェアを使用して解決する方が安価です。より高速なシリコンを購入する方が安くないという少数のケースでは、クラスが制限要因になることはなく、この回答の残りの部分が適用されます。

私の経験では、パフォーマンスの強化が必要なもののほとんどは、単位の粒度以外のものに縛られています。より高速なデータ ストレージ メカニズムまたはデータのインデックスを使用するか、より優れたメモリ内コレクション アーキテクチャを使用するか、ネストされたループの代わりにディクショナリとループを使用すると、パフォーマンスが大幅に向上します。これらに気をつけても、まだパフォーマンスが気になる場合は、少数のオプションが残されます。そのほとんどは、非常にパフォーマンスの高い言語でコードを非常に慎重に手作業で最適化する必要があります。アルゴリズムのコアを行う一流のコーダー。

覚えておくべき単純な原則もあります: 時期尚早の最適化に注意してください。

于 2013-01-21T13:39:03.877 に答える
0

クラスの割り当てが (おそらく DI を使用して) 実行されているアプリケーションに、より少なくより太いクラスのアプリケーションと比較して、実際のパフォーマンス ヒットはありますか?

高性能は、効率的なアルゴリズムの実装から生まれます。効率的なアルゴリズムはコーディングが難しいことが多いため、より適切なテストが必要になります。多くのクラスを使用して適切なテストを行うと、効率的なアルゴリズムのコーディングが容易になり、パフォーマンスが向上します。

于 2013-01-21T13:50:38.613 に答える