web-dev-qa-db-ja.com

「POCO」の定義

誰かが正確に「POCO」の意味を定義できますか?私はより頻繁にこの用語に遭遇していますが、それは単なるクラスに関するものなのか、それとももっと何かを意味するのか疑問に思っています。

225
saku

「プレーンな古いC#オブジェクト」

単なる通常のクラスであり、インフラストラクチャの懸念やドメインオブジェクトが持つべきではないその他の責任を記述する属性はありません。

編集-他の答えが述べているように、それは技術的には「Plain Old CLR Object」ですが、私はDavid Arnoのコメントのように、特定の言語や技術とのつながりを避けるために「Plain Old Class Object」を好みます。

明確にする:言い換えれば、特別な基本クラスから派生したものではなく、プロパティの特別な型を返しません。

それぞれの例については、以下を参照してください。

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つはnot単なる古いオブジェクトです。

185
David Mohundro

ほとんどの人はそれを言っています-以前のPOJOとは対照的に、プレーンオールドCLRオブジェクト-プレーンオールドJavaオブジェクト)

POJOの1つはEJBから出てきたため、値オブジェクト(ORMなどのクエリから取得したもの)などの特定の親クラスから継承する必要があったため、EJBから移動したい場合(例:春)、あなたは詰められました。

POJOは、使用しているフレームワークで「機能」させるために、継承または属性マークアップを強制しない単なるクラスです。

POCOは、.NETを除いて同じです。

通常、ORMの周りで使用されます。古い(および現在の一部)では、特定の基本クラスから継承する必要があり、その製品に関連付けられます。新しいものはいけません(nhibernateは私が知っているバリアントです)-クラスを作成し、ORMに登録するだけで、あなたはオフになります。はるかに簡単です。

45
Nic Wise

私はこれについて間違っているかもしれません。しかし、とにかく、私は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}";
    }
}
20
Viking jonsson

POCOは「Plain Old CLR Object」の略です。

9
Robert Gamble

他の回答を追加すると、POxxの用語はすべてPOTSに由来するように見えます( Plain old telephone services )。

POXは、RESTやSOAPなどに関連付けられた複雑なマルチレイヤーのものではなく、単純な(単純で古い)XMLを定義するために使用され、漠然としておもしろい用語です。 PO(選択言語の挿入)O用語は、冗談をやや薄めにしています。

7
David Arno

.NETでは、POCOは「プレーンな古いCLRオブジェクト」です。 「プレーンな古いC#オブジェクト」ではありません...

6
Hardgraf

Javaランドでは、通常「PO」は「プレーンオールド」を意味します。残りはトリッキーになる可能性があるため、(Javaのコンテキストでの)あなたの例は「プレーンな古いクラスオブジェクト」であると推測しています。

他のいくつかの例

  • POJO(古いJavaオブジェクト)
  • POJI(プレーンJavaインターフェース)
5
basszero

面白い。プログラミングに関係し、POCOが含まれていることを私が知っているのは、 POCO C++フレームワーク だけです。

3
ayaz

WPF MVVMの用語では、POCOクラスはPropertyChangedイベントを発生させないクラスです

2
Null Pointer

POCOは、ここの人々の99.9%にとって、Plain Old Class ObjectまたはPlain Old C Objectを意味すると確信していますが、POCOはスクリプト言語で構築されたAnimator Pro(Autodesk)でもあります。

1