4

値を保持するローカル変数を使用して、設定可能なプロパティを持つクラスのコードをクリーンアップしています。

現在、コードの一部の部分は、独自のプロパティを使用するのではなく、値を取得するために外部から呼び出しています。他の部分では、ローカル変数が使用されている間、プロパティ自体を使用することがあります。

この場合、プロパティはこのクラスのオブジェクトを作成するファクトリ メソッドによって設定されるだけなので、プロパティは常に変数と同じになります。ただし、これが私が書いているコードの場合であると想定する必要があるかどうかはわかりません。これにより、将来、getter メソッドの背後にロジックを追加することが難しくなります。

これはどちらかが正しいかもしれないものですか、それともオブジェクト指向の原則で基本的なことを忘れていますか?

4

4 に答える 4

1

複雑さを軽減し、保守性を高める。

最初にすべきことは、アイテムが存在する場所の数を減らすことです (これを行っているようです)。

次に、言語のトリックを使用してコードのサイズを縮小する必要があります。たとえば、c# の一部のバージョンでは、プロパティの値を保持するためにフィールドを宣言する必要はありません。

これが完了したら、いずれかの方法を選択できます。パフォーマンスの最適化は、一方から他方へともたらされるわけではありません。しかし、一貫していること。つまり、保守性が向上します。

個人的には、可能な場合は常にプロパティを使用することを好みます。

于 2012-06-01T06:17:27.570 に答える
0

readonly私は、オブジェクトの初期化/コンストラクターを介してのみ定数値を取得することを意味するようにマークしたフィールドを除いて、プロパティを使用します。

私にとって、アプリケーションの要件が将来変更された場合でも、プロパティはより簡単に維持できます。コードを 1 か所に追加するだけです。

于 2012-06-01T06:49:25.263 に答える
0

自動実装プロパティを使用し、後で必要になった場合にのみプライベート変数と追加の get/set コードを追加します。

例えば

  public int CustomerID { get; private set; }
于 2012-06-01T06:14:19.617 に答える
0

OO の観点からは、プロパティには 2 つのタイプがあると思います。(注: これはクラス内からのみ適用されます。クラスのユーザーはこの違いを認識しないでください。)

一部のプロパティは、メイン クラスに含まれる、実際には独立したクラスです。(「メイン」クラスは考慮中のクラスであり、必ずしもプログラムを開始するクラスではありません。) これらは、メイン クラスのコードであっても、プロパティを介してのみ参照する必要があります。その get メソッドと set メソッドを見ると、プロパティの全体像がわかります。それらはメイン オブジェクトの不可欠な部分ではなく、パブリック フィールドのような関連情報ですが、より安全です。

もう 1 つの種類、メイン オブジェクトの不可欠な部分です。極端な場合、関連付けられたフィールドがないこともあります。呼び出されると、getter は多くのフィールドを含む計算で値を組み立てる場合があります。フィールドが 1 つしかない場合、そのフィールドを読み書きする内部コードは、getter と setter がフィールドに多くの変更を加える傾向があります。(オブジェクトは、5 から始まる値を追跡する場合があります。時間の経過とともに、10 が減算され、12 が加算される可能性があります。その時点で、値は 7 になるはずです。しかし、ゲッターは、値が小さいことを外部の世界に決して認めたくない場合があります。したがって、値が -5 の場合は 0 を返します。)

それぞれがどのタイプのプロパティであるかを判断し、いずれかの方法で進みます。違いを分割しないでください。すべての参照をプロパティ自体にするか、すべての参照をその背後にあるフィールドにする必要があります。(ただし、getter と setter でコードを複製するよりも、プロパティを直接参照する方がよい場合があります。ただし、これにはあまり慣れていません。)

「外部から呼び出す」ことで、フィールドの値を返す通常のメソッドがあることがわかりました。これは理にかなっているかもしれません。直感的にするために、プロパティは、通常のメソッドが変更を加えることができる、可能な限り public フィールドのように動作する必要があります。(プロパティ DistanceInFeet とメソッド GetDistanceInMeters() を検討してください)。また、コードを複製するのではなく、Get メソッドを呼び出す方が理にかなっています。これは、プロパティ全体がオブジェクトの不可欠な部分である 2 番目のタイプであることを意味します。

したがって、クリーンアップしているコードは、オブジェクト指向に関しては正しいかもしれませんが、そうではないと思います。

于 2012-06-01T20:59:56.663 に答える