パブリックプロパティとパブリックフィールドの使用


8

私が作業している場所では、プロパティの使用はお勧めできません。「スピードアップ」するコード生成ツールがあります。すべてのオブジェクトデータはパブリックフィールドになります。とにかくプロパティをリクエストすると、次のようになります。

Public sFoo as String

Public Property Foo as String
  Get
    Return sFoo
  End Get
  Set(ByVal value as String)
    sFoo = value
  End Set
End Property

これを行うための合理的な議論は考えられません。パブリックプロパティとパブリックフィールドの両方を使用する正当な理由はありますか?


2
番号。コードジェネレーターを変更して、パブリック文字列Foo {get;を生成します。セットする; 代わりに
スティーブンA.ロウ

1
それが物事をスピードアップするという証拠はありますか?実行時のコードが異なるという証拠はありますか?なぜあなたはこれを求めているのですか?これはばかげていることはすでにわかっています。証明の重荷はこの練習をしている人にあるべきです。彼らがそれを正当化することができず、あなたが彼らに変化をもたらすことができないなら、私は新しい仕事を勧めます!
デイブヒリアー2013

4
なぜ反対票か。彼の会社に愚かなガイドラインがあるのは作者のせいです。
Arseni Mourzenko 2013

おそらく、フィールドはプライベートであり、プロパティによって返されることを意味していました。たぶん誰かがその概念を知っていたが、大きな時間をめちゃくちゃにした。パブリックプロパティとして公開されたプライベートフィールドを使用することは、良いコーディング方法であり、たとえそれが見えなくても使用されます。
Piotr Kula

回答:


28

番号。

これには正当な理由はありません。それ:

  1. 意味のないことをすることで他のプログラマーを混乱させ、
  2. クラスの内部を不必要に公開し、
  3. 同じものに2つのエントリポイントを提供します。
  4. ??

代わりに自動実装プロパティを使用してください。


5
反対投票者は、パブリックプロパティとフィールドの使用を同時に真剣に主張していますか?投稿するすべての回答に1つの反対票を投じるのに少し疲れてきました...私の回答を反対票で投票するのに十分な時間があれば、新しい趣味が必要です。
Robert Harvey

誰かがロバートに忍び寄っている。これは間違いなく正しい答えであり、OPの質問は私を驚かせました。学習し、それを書くの年でもそのようなことを行うには私の心を交差させたことがない...
ピョートル・クラを

プロパティを使用すると、フィールドに直接アクセスするよりもパフォーマンスが低下するという主張もあるようですが、一般的にはそうではありません。これまでに遭遇したCLRのすべてのバージョンで、このような単純なプロパティはほとんどの場合オプティマイザによってインライン化されるため、これは現実的な問題ではありません。
Cole Campbell

2

基本的なオブジェクト指向の原則の1つは、カプセル化と呼ばれます。各オブジェクトは外部からの変更からデータを保護する必要があると述べています。

これは、すべてのフィールドをプライベートにし、可能であればすべてのプロパティセッターをプライベートにすることによって行われます。代わりに、状態を変更するために使用されるメソッドを追加して、動作を導入する必要があります。

あなたがしていることは非常に間違っています。本質的には、すべてのクラスが単なるデータコンテナーである関数型プログラミングか、メソッドをグループ化する方法です。前者は、Anemic Domain Modelと呼ばれるアンチパターンです。

それに関する問題は、すべてのドメインモデルのビジネスロジックがアプリケーションの複数の場所(つまり、オブジェクトが変更されるすべての場所)に分散していることです。したがって、オブジェクトiselfを分析するだけでなく、オブジェクトが使用されるすべての場所を分析する必要があるため、ビジネスルールに関連するバグを見つけるのは困難です。

私はこれについてここにブログを書いています:http : //blog.gauffin.org/2012/06/protect-your-data/


1

パブリックプロパティとパブリックフィールドの両方を使用する正当な理由はありますか?

要するに、いいえ、その理由はありません。パブリックプロパティは、パブリックフィールドよりもビジネスで使用されます。

プロパティの多くの用途の一部は次のとおりです。

  • プロパティは変更を許可する前にデータを検証できます
  • データベースなどの他のソースから実際にデータが取得されるクラスのデータを透過的に公開できます。
  • イベントの発生や他のフィールドの値の変更など、データが変更されたときにアクションを実行できます

すでに提案したように、自動プロパティを使用することは、もう1つの賢い方法です。

MSDNの詳細-VB.NETプロパティ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.