回答:
ほとんどの場合、アンチパターンです。
どうして?「Operator」クラスとデータ構造を使用した手続き型プログラミングが容易になるためです。データと動作を分離しますが、これは正確なOOPではありません。
多くの場合、DTO(データ転送オブジェクト)
ビジネス/ドメインオブジェクトから派生した、データを交換するためのデータ構造のみを読み取ります。
時々:単なるデータ構造。
まあ、たまに、単純で単純なデータを保持するための構造がなくてはならず、何も操作しない場合もあります。しかし、私はパブリックフィールドではなく、アクセサー(ゲッターとセッター)を使用します。
私はそれを呼び出すstruct
かrecord
、それがデータストレージに使用されているため、C
ご覧のようにstruct(Cプログラミング言語)に非常に一般的です。したがって、個人的にstruct
は、より適切で読みやすいクラスの代わりにを使用したいと思います。
struct A
{
public string something;
public int a;
}
通常、他の人が言ったように、それらはDTO(データ転送オブジェクト)として使用されます。
これらは、Plain Old __ Objects(PO_Os)と呼ばれ、空白はJava、C、CIL、または使用している言語です。
通信用の単純なデータブロックとして使用されている場合、それらはデータ転送オブジェクト(DTO)と呼ばれます。
外部から提供されたデータを表す場合、それらはエンティティと呼ばれます。
私はそのようなクラスを可変データホルダーと呼び、時々ジェネリックフォームを使用しました:
class DataHolder<T>
{
public T dat;
}
dat
プロパティアクセサが実行できることは何もないため(フィールドの読み取り/書き込み以外)、一部の実装に影響を与えないため、プロパティ内でラップするとパフォーマンスが低下し、メリットがありません。さらに、(または、構造体の場合はそのフィールドを持つ)Interlocked
メソッドを使用する必要dat
がある場合dat
がありますが、プロパティにラップされている場合は不可能です。
しばらく可変データ保有者は、(変更可能かどうか)のタイプのために有用である可能性があることに注意することはその必要性ホールドデータ、彼らが安全に不変型がするのと同じ方法でデータ交換のために使用することはできません。たとえば、次のようなステートメント:
myData = myCollection.GetData(myKey);
GetData
変更可能なデータへの参照を含まない不変のクラス型または構造体(「ミュータブル」かどうか)が返された場合、明確な意味があります。ただし、変更可能なクラスオブジェクトを返した場合、そのオブジェクトへの変更が基になるコレクションによって一貫して無視されるか、一貫してクリーンな更新になるか、どちらの説明にも合わない厄介なまたは予測できない動作が発生するかどうかは不明です。
コレクションが可変オブジェクトでデータを返すことを望んだ場合、正しいパラダイムは多くの場合次のようになります。
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
そのアプローチを使用すると、コレクションからのデータが入力されますが、関数が完了するとそれへの参照を保持することは期待されず、他の目的でそれを使用することもないという明確な意味GetData
があります。 同様に、参照を保持せずに情報を独自の内部データ構造にコピーします。このアプローチの利点の1つは、クライアントコードがループ内で多くのデータ項目を読み取る場合、ループの外側に1つのインスタンスを安全に作成し、毎回同じインスタンスを再利用できることです。同様に、新しいインスタンスを作成しなくても、キーに関連付けられたオブジェクトインスタンスを(再渡されたインスタンスからデータをコピーして)再利用できる場合があります。myData
myCollection
StoreData
myData
myData
myCollection