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ù?
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ù?
Risposte:
"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.
System.Object
è un POCO. Se eredita ExternalFramework.OrmMapperBase
o qualcosa del genere, non è più un POCO.
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.
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}";
}
}
POCO è l'acronimo di "Plain Old CLR Object".
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.
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
In termini WPF MVVM, una classe POCO è una classe che non genera eventi PropertyChanged
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).
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; }
}