メソッドなしでクラスを何と呼びますか?
例えば、
class A
{
public string something;
public int a;
}
上記はメソッドのないクラスです。このタイプのクラスには特別な名前がありますか?
ほとんどの場合、アンチパターンです。
どうして? 「Operator」クラスとデータ構造を使用した手続き型プログラミングが容易になるためです。データと動作を分離しますが、これは正確なOOPではありません。
多くの場合、A DTO(データ転送オブジェクト)
ビジネス/ドメインオブジェクトから派生した、データを交換するためのデータ構造のみを読み取ります。
時々:単なるデータ構造
たまに、単純で単純なデータを保持するための構造がなくてはならず、何も操作しない場合もあります。しかし、私はパブリックフィールドではなく、アクセサー(ゲッターとセッター)を使用します。
これはstruct
またはrecord
と呼びます。データストレージに使用されており、C
などの言語によく見られるためです。 struct (Cプログラミング言語) 。したがって、個人的には、より適切で読みやすいクラスの代わりにstruct
を使用したいと思います。
struct A
{
public string something;
public int a;
}
通常、それらは DTO(データ転送オブジェクト) として使用されます。
これらは Plain Old __ Objects (PO_Os)として知られています。空白はJavaまたはCまたはCIL、または使用している言語です。
それらが通信のための単純なデータブロックとして使用されている場合、それらは Data Transfer Objects (DTO)として知られています。
外部から提供されたデータを表す場合、それらは Entities と呼ばれます。
私はそのようなクラスを可変データホルダーと呼び、時々ジェネリックフォームを使用しました:
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
がmyData
にコレクションからのデータが入力されることを意味しますが、myCollection
はそれへの参照を保持することが期待されません関数が完成したら、それを他の目的で使用することはありません。 StoreData
も同様に、参照を保持せずに、情報myData
を独自の内部データ構造にコピーします。このアプローチの利点の1つは、クライアントコードがループ内で多くのデータ項目を読み取る場合、ループの外側でmyData
のインスタンスを1つ安全に作成し、その同じインスタンスを毎回再利用できることです。同様に、myCollection
は、新しいインスタンスを作成せずに、キーに関連付けられたオブジェクトインスタンスを(再渡されたインスタンスからデータをコピーして)再利用できる場合があります。
Schema
と呼びます。
これは、データベーステーブル、デシリアライズされたレコード、DTOなどの複数の用途をカバーしています
コンテキストによっては、エンティティと呼びます。私の退屈なビジネスアプリケーションでは、これらは通常 1:1を私のDERにマップします。