4

同様の質問

私の質問

多くの人々は、保護されたメソッドは、使用する理由がある場合にのみ使用する必要があることに同意しています。テスト駆動開発モデルはどのようにこれに組み込まれますか?private(特に偽造オブジェクトに関して。)TDD、現在はBDDの大ファンであり、C#開発者である友人がいます。彼は、このキーワードをほとんど使用しないと言っていました。彼がそれを言った後、私はそれをフィールドに使い続けましたが、私のすべてのメソッドをデフォルトに設定し始めましたprotected。StackOverflowの一部の人々はprotected、デフォルトで使用する必要があることに同意しています。この質問について検討していただけませんか。protectedデフォルトで使用する最良の理由は何ですか(上記のスレッドはそうしない理由を説明しているため)?

編集:Odedのコメントにprotectedよると、デフォルトでOpen-Closed Principle(クラスは拡張のために開かれ、変更のために閉じられる必要があります)を使用するのはどうですか?

4

1 に答える 1

10

これが私がベストプラクティスと考えていることであり、私の開発を行い、すべてのクライアントに提案します。

  1. テスト(またはBDDに興味がある場合は仕様)から始めます。テストから取得する本番クラスとメソッドは公開する必要があります。
    • 注:.NETで開発している場合は、代わりにinternalキーワードを使用することを検討することをお勧めします(テストプロジェクトがコードを使用できるように、InternalsVisibleToアセンブリ属性を本番アセンブリに追加します)。次に、別のプロダクションアセンブリがそれに依存している場合にのみ、公開します。
  2. TDDのリファクタリングフェーズの一部として作成するメソッドはすべてプライベートにする必要があります。
  3. 派生プロダクションクラスがヘルパーメソッドを必要とする場合にのみ、ヘルパーメソッドを保護します。
  4. リファクタリングフェーズで作成された(現在はプライベートまたは保護されている)メソッドで、別のプロダクションクラスで必要なものは、ヘルパークラスに抽出して公開する必要があります(または.NETの内部、およびこの概念をサポートする言語)。
  5. 別のアセンブリでヘルパークラスが必要な場合は、次のようにします。
    • 他のアセンブリがすでにヘルパークラスのアセンブリに依存している場合は、ヘルパークラスを公開します(まだ公開されていない場合)。
    • 他のアセンブリがヘルパークラスのアセンブリに依存していない場合は、ヘルパークラスをヘルパーアセンブリ(最適なもの、または新しいもの)に抽出し、公開します。まだ参照していない場合は、元のアセンブリが新しいヘルパーアセンブリを参照するようにしてください。

これは、ほとんどすべてのケースをカバーするはずです。
お役に立てれば。

于 2011-08-12T07:29:21.377 に答える