263

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

4

11 に答える 11

223

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

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

編集-他の回答が述べているように、それは技術的には「プレーンオールドCLRオブジェクト」ですが、David Arnoのコメントのように、特定の言語やテクノロジーとの関係を避けるために「プレーンオールドクラスオブジェクト」を好みます。

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

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

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つは単なる古いオブジェクトではありません。

于 2008-10-30T12:31:20.040 に答える
51

ほとんどの人はそれを言っています - Plain Old CLR Object (以前の POJO - Plain Old Java Object とは対照的に)

POJO は EJB から派生したもので、値オブジェクト (ORM などのクエリから返されるもの) などを特定の親クラスから継承する必要がありました。春)、お腹いっぱいになりました。

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

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

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

于 2008-10-30T13:15:33.913 に答える
29

私はこれについて間違っているかもしれません..しかし、とにかく、POCOはPlain Old Class CLR Objectであり、POJOのplain old Java Objectから来ていると思います。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}";
    }
}
于 2016-07-07T19:42:16.597 に答える
9

POCOは「PlainOldCLRObject」の略です。

于 2008-10-30T12:32:52.020 に答える
8

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

于 2015-02-13T16:20:49.377 に答える
7

他の回答を追加すると、POxx 用語はすべて POTS (一般電話サービス) に由来するように見えます。

POX は、REST や SOAP などに関連する複雑な多層構造ではなく、単純な (昔ながらの) XML を定義するために使用され、便利で、漠然とした面白い用語でした。PO (選択した言語を挿入)O 用語は、むしろ冗談を薄くしています。

于 2008-10-30T12:38:36.080 に答える
5

Javaの土地では、通常、「PO」は「プレーンオールド」を意味します。残りはトリッキーかもしれないので、あなたの例(Javaのコンテキストで)は「プレーンな古いクラスのオブジェクト」だと思います。

他のいくつかの例

  • POJO(プレーンオールドJavaオブジェクト)
  • POJI(プレーンな古いJavaインターフェイス)
于 2008-10-30T12:32:40.490 に答える
3

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

于 2008-11-16T06:41:58.683 に答える
2

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

于 2016-07-18T14:36:11.973 に答える
2

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

于 2014-01-01T08:22:39.990 に答える