誰かが「POCO」の意味を正確に定義できますか?ますます頻繁にこの用語に遭遇し、それが単なるクラスに関するものだけなのか、それとももっと何かを意味するのか疑問に思っています。
誰かが「POCO」の意味を正確に定義できますか?ますます頻繁にこの用語に遭遇し、それが単なるクラスに関するものだけなのか、それとももっと何かを意味するのか疑問に思っています。
回答:
「プレーンな古いC#オブジェクト」
単なる通常のクラスであり、ドメインオブジェクトが持つべきではないインフラストラクチャの懸念やその他の責任を表す属性はありません。
編集-他の回答が述べたように、それは技術的には「プレーンオールドCLRオブジェクト」ですが、私はデビッドアーノのコメントと同様に、特定の言語またはテクノロジーとの関係を避けるために「プレーンオールドクラスオブジェクト」を好みます。
明確にするために:言い換えると、それらは特別な基本クラスから派生したものではなく、プロパティの特別な型を返しません。
それぞれの例については、以下を参照してください。
POCOの例:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
POCOではないものの例:
public class PersonComponent : System.ComponentModel.Component
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name { get; set; }
public int Age { get; set; }
}
特別クラスの両方から継承上記の例では、それに追加の行動だけでなく、用途変更の動作にカスタム属性を与えること...同じプロパティが両方のクラスに存在しますが、1があるではないもはや単なる古いオブジェクト。
System.Object
はPOCOです。それから継承するExternalFramework.OrmMapperBase
か、そのようなものであれば、もはやPOCOではありません。
ほとんどの人はそれを言っています-プレーンオールドCLRオブジェクト(以前のPOJO-プレーンオールドJavaオブジェクトとは対照的)
POJOはEJBから生まれたものであり、値オブジェクト(ORMなどのクエリから取得したもの)などの特定の親クラスから継承する必要があるため、EJBから(たとえば、春)、あなたはぬいぐるみでした。
POJOは、継承や属性マークアップを強制せずに、使用しているフレームワークで「機能」するクラスです。
.NETを除いて、POCOは同じです。
一般的にORMの周りで使用されます-古い(および現在のいくつかの)は、特定の基本クラスから継承する必要があり、その製品に関連付けられています。新しいものはいけません(nhibernateは私が知っているバリアントです)-クラスを作成し、それをORMに登録するだけで、オフになります。はるかに簡単です。
私はこれについて間違っているかもしれません。しかし、とにかく、POCOはプレーンオールドクラス CLRオブジェクトであり、POJOプレーンオールドJavaオブジェクトから来ていると思います。POCOは、データを保持し、動作を持たないクラスです。
C#で記述された例を次に示します。
class Fruit
{
public Fruit() { }
public Fruit(string name, double weight, int quantity)
{
Name = name;
Weight = weight;
Quantity = quantity;
}
public string Name { get; set; }
public double Weight { get; set; }
public int Quantity { get; set; }
public override string ToString()
{
return $"{Name.ToUpper()} ({Weight}oz): {Quantity}";
}
}
POCOは「Plain Old CLR Object」の略です。
他の回答を追加すると、POxx用語はすべてPOTS(プレーンな古い電話サービス)に由来するように見えます。
REST、SOAPなどに関連する複雑な多層構造のものではなく、単純な(プレーンな)XMLを定義するために使用されるPOXは、便利で漠然と面白い用語でした。PO(選択した言語を挿入する)O用語は、冗談を薄めています。
面白い。私がプログラミングに関係し、POCOが含まれていることを知っていた唯一のことは、POCO C ++フレームワークです。