Definizione "POCO"


238

Qualcuno può definire cosa significa esattamente "POCO"? Mi capita di incontrare il termine sempre più spesso e mi chiedo se si tratti solo di lezioni semplici o significhi qualcosa di più?


27
È anche divertente che "poco" sia una parola spagnola che significa "poco, non molto". Quindi, si adatta bene a questo contesto! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue

6
Significa la stessa identica cosa anche in italiano :)
BlackBear il

3
E in portoghese significa un errore perché è scritto: "pouco".
Ismael,

3
A me sembra PocoHaram :)
utileBee

4
In polacco "POCO" è la domanda "Perché usarlo"
titol

Risposte:


197

"Plain Old C # Object"

Solo una classe normale, nessun attributo che descriva le preoccupazioni dell'infrastruttura o altre responsabilità che gli oggetti di dominio non dovrebbero avere.

EDIT - come hanno affermato altre risposte, è tecnicamente "semplice oggetto CLR vecchio" ma io, come commenta David Arno, preferisco "semplice oggetto di vecchia classe" per evitare legami con linguaggi o tecnologie specifici.

PER CHIARICARE: In altre parole, non derivano da alcuna classe base speciale, né restituiscono alcun tipo speciale per le loro proprietà.

Vedi sotto per un esempio di ciascuno.

Esempio di un POCO:

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

    public int Age { get; set; }
}

Esempio di qualcosa che non è un POCO:

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

    public int Age { get; set; }
}

L'esempio sopra eredita entrambi da una classe speciale per dargli un comportamento aggiuntivo e utilizza un attributo personalizzato per cambiare comportamento ... le stesse proprietà esistono su entrambe le classi, ma uno non è più solo un semplice oggetto vecchio.


15
Vorrei vedere un POCO come una semplice vecchia classe che non cerca di far parte del set di modelli alla moda. Comunque mi piace anche la tua risposta.
David Arno,

1
D'accordo - non sono un fan del nome C #, ma è quello che ho sentito per la prima volta quando mi chiedevo della domanda :) La classe si adatta quindi a POJO, POVBO POC # O, POC ++ O, PORO, ecc.
David Mohundro,

14
Questo non dà davvero una buona risposta nella mia opinione personale come qualcuno anche curioso. Ok, quindi nessun attributo che descriva l'infrastruttura (cosa intendi per attributi e infrastruttura ... una connessione DB per esempio? Che cosa? Per favore). Quali responsabilità non dovrebbero avere i tuoi oggetti di dominio? Quindi POCO è fondamentalmente un oggetto di dominio (oggetto BL)? Quindi davvero POCO è solo un altro acronimo di un Business Layer Object / Domain Object che significano tutti la stessa dannata cosa. POCO / Business Layer Object / Domain Object == stessa dannata cosa, solo 3 acronimi diversi per lo stesso concetto giusto?
Positivo

4
questa risposta non mi dice assolutamente nulla di ciò che è nel mondo reale ... solo una definizione che chiunque può cercare su Wikipedia. Che ne dici di alcuni esempi di lezioni POCO ?? e perché sono POCO nel contesto.
Positivo

1
Ad esempio, una classe da cui hai scritto che eredita solo System.Objectè un POCO. Se eredita ExternalFramework.OrmMapperBaseo qualcosa del genere, non è più un POCO.
David Mohundro,

47

Molte persone lo hanno detto - Plain Old CLR Object (in contrapposizione al precedente POJO - Plain Old Java Object)

Quello POJO è uscito da EJB, il che ha richiesto di ereditare da una classe genitore specifica per cose come oggetti valore (ciò che si ottiene da una query in un ORM o simile), quindi se si desidera passare da EJB (ad es. Primavera), eri pieno.

I POJO sono solo classi che non impongono l'ereditarietà o qualsiasi markup degli attributi per farli "funzionare" in qualunque framework tu stia usando.

I POCO sono gli stessi, tranne in .NET.

Generalmente verrà utilizzato attorno agli ORM: quelli più vecchi (e alcuni attuali) richiedono che tu erediti da una classe base specifica, che ti lega a quel prodotto. Quelli più nuovi non lo fanno (non è la variante che conosco): fai semplicemente una lezione, la registri con l'ORM e sei fuori. Molto più facile.


1
solo per motivi di completezza, CLR è in grado di eseguire Common Language Runtime, la macchina virtuale .net.
filante

4
.Net 3.5 sp1 Esempio ORM: il framework Entity richiede che le classi ereditino da una certa classe framework. LINQ to SQL non ha questo requisito. Pertanto LINQ to SQL funziona con POCO e il framework Entity no.
Lucas,

23

Potrei sbagliarmi su questo ... ma comunque, penso che POCO sia un oggetto CLR di vecchia classe e provenga da un semplice oggetto Java di POJO. Un POCO è una classe che contiene dati e non ha comportamenti.

Ecco un esempio scritto in 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}";
    }
}

4
Questa dovrebbe essere la risposta accettata. Fornisce la spiegazione effettiva (non ha comportamenti) e ha anche un esempio per comprendere meglio l'aspetto di un POCO.
Héctor Álvarez,

Il metodo ToString () in questo esempio non è un "comportamento"?
jdoer1997,

Direi che un POCO non ha un comportamento. È semplicemente una classe che non dipende da un altro framework / libreria diverso da .Net. Vale a dire la classe File è POCO, ma DbContext non è perché dipende da Entity Framework.
user3285954

9

POCO è l'acronimo di "Plain Old CLR Object".


24
ooooook? quindi cosa significa questo nel contesto o nel mondo reale?
Positivo

27
E come direbbe il mio insegnante di elettricità al liceo, "... e le arance hanno un sapore aranciato"
Ian Boyd,

7
Giusto, ma questo post sembra più un commento, piuttosto che una risposta poiché non risponde completamente alla domanda.
anar khalilov,

7

Per aggiungere le altre risposte, i termini POxx sembrano tutti derivare da POTS ( semplici vecchi servizi telefonici ).

Il POX, usato per definire un semplice (semplice vecchio) XML, piuttosto che le complesse cose a più livelli associate a REST, SOAP ecc., Era un termine utile e vagamente divertente. PO (inserire la lingua di scelta) O termini hanno piuttosto logorato la battuta.


6

In .NET un POCO è un "semplice oggetto CLR vecchio". Non è un "semplice oggetto C # vecchio" ...


5

Nella terra di Java in genere "PO" significa "semplicemente vecchio". Il resto può essere complicato, quindi immagino che il tuo esempio (nel contesto di Java) sia "un semplice oggetto di vecchia classe".

alcuni altri esempi

  • POJO (semplice vecchio oggetto Java)
  • POJI (semplice vecchia interfaccia java)

3

Interessante. L'unica cosa che sapevo che aveva a che fare con la programmazione e che conteneva POCO era il framework POCO C ++ .


2

In termini WPF MVVM, una classe POCO è una classe che non genera eventi PropertyChanged


1

Sebbene sia sicuro che POCO significhi Plain Old Class Object o Plain Old C Object per il 99,9% delle persone qui, POCO è anche il linguaggio di scripting di Animator Pro (Autodesk).


0

POCO è un semplice oggetto CLR vecchio, che rappresenta lo stato e il comportamento dell'applicazione in termini di dominio problematico. è una classe pura, senza eredità, senza alcun attributo. Esempio:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.