web-dev-qa-db-fra.com

Définition 'POCO'

Quelqu'un peut-il définir ce que signifie exactement "POCO"? Je rencontre le terme de plus en plus souvent, et je me demande s'il ne s'agit que de classes simples ou si cela signifie quelque chose de plus?

225
saku

"Objet ancien et simple en C #"

Juste une classe normale, aucun attribut décrivant les problèmes d'infrastructure ou d'autres responsabilités que vos objets de domaine ne devraient pas avoir.

EDIT - comme d’autres réponses l’ont indiqué, c’est techniquement un "objet simple ancien du CLR", mais comme les commentaires de David Arno, je préfère "un objet ancien de classe" pour éviter les liens avec des langages ou des technologies spécifiques.

POUR CLARIFIER: En d’autres termes, elles ne proviennent pas d’une classe de base spéciale, ni ne renvoient de types spéciaux pour leurs propriétés.

Voir ci-dessous pour un exemple de chacun.

Exemple de POCO:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }
}

Exemple de quelque chose qui n’est pas un POCO:

public class PersonComponent : System.ComponentModel.Component
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string Name { get; set; }

    public int Age { get; set; }
}

L'exemple ci-dessus hérite d'une classe spéciale pour lui donner un comportement supplémentaire et utilise un attribut personnalisé pour changer de comportement… les mêmes propriétés existent sur les deux classes, mais l'une est pas simplement un vieil objet ordinaire .

185
David Mohundro

La plupart des gens l'ont dit - Plain Old CLR Object (par opposition à POJO précédent - Plain Old Java Object)

Le POJO est sorti d’EJB, ce qui vous obligeait à hériter d’une classe parente spécifique pour des objets comme les objets de valeur Printemps), tu étais bourré.

Les POJO ne sont que des classes qui n'imposent pas l'héritage ni les balises d'attributs pour les faire "fonctionner" dans le cadre que vous utilisez.

Les POCO sont les mêmes, sauf dans .NET.

Généralement, il sera utilisé autour des ORM - les plus anciennes (et certaines actuelles) nécessitent que vous héritiez d'une classe de base spécifique, ce qui vous lie à ce produit. Les plus récents ne le sont pas (nhibernate étant la variante que je connais) - vous venez de faire un cours, enregistrez-le auprès de l'ORM et vous êtes parti. Beaucoup plus facile.

45
Nic Wise

Je peux me tromper à ce sujet .. mais de toute façon, je pense que POCO est Plain Old Classe Objet CLR et il provient de POJO plain old Java. Un objet POCO est une classe qui contient des données et ne comporte aucun comportement.

Voici un exemple écrit en 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 signifie "Plain Old CLR Object".

9
Robert Gamble

Pour ajouter les autres réponses, les termes de POxx semblent tous provenir de POTS ( services téléphoniques normaux ).

Le POX, utilisé pour définir un XML simple (ancien), plutôt que les éléments complexes multicouches associés à REST, SOAP etc.), était un terme utile et vaguement amusant. PO (insérer langue de choix) O termes ont plutôt porté la blague mince.

7
David Arno

Dans .NET, un POCO est un "Objet CLR simple et ancien". Ce n'est pas un "vieux vieil objet C #" ...

6
Hardgraf

Dans Java, le mot "PO" signifie "tout simplement vieux". Le reste peut être délicat. Je suppose donc que votre exemple (dans le contexte de Java) est "un ancien objet de classe" .

quelques autres exemples

  • POJO (plain old Java))
  • POJI (plain old Java))
5
basszero

Intéressant. La seule chose que je savais qui avait trait à la programmation et qui contenait POCO, c’est le framework POCO C++ .

3
ayaz

En termes de WPF MVVM, une classe POCO est une classe qui ne déclenche pas les événements PropertyChanged

2
Null Pointer

Bien que je suis sûr que POCO signifie Objet Plain Old Class ou Objet Plain Old C pour 99,9% des gens, POCO est également le langage de script construit par Animator Pro (Autodesk).

1
Mr Mystery Guest