Kann jemand definieren, was genau "POCO" bedeutet? Ich begegne dem Begriff immer öfter und frage mich, ob es nur um einfache Klassen geht oder ob es etwas mehr bedeutet?
Es ist auch lustig, dass "poco" ein spanisches Wort ist, das "wenig, nicht viel" bedeutet. Es passt also gut zu diesem Kontext! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue
6
Es bedeutet genau dasselbe auch auf Italienisch :)
BlackBear
3
Und auf Portugiesisch bedeutet ein Fehler, weil es geschrieben ist: "pouco".
Ismael
3
Klingt für mich nach PocoHaram :)
nützlichBee
4
Auf Polnisch ist "POCO" die Frage "Warum es benutzen"
Titol
Antworten:
197
"Einfaches altes C # -Objekt"
Nur eine normale Klasse, keine Attribute, die Infrastrukturprobleme oder andere Verantwortlichkeiten beschreiben, die Ihre Domänenobjekte nicht haben sollten.
BEARBEITEN - wie andere Antworten angegeben haben, handelt es sich technisch gesehen um "einfaches altes CLR-Objekt", aber ich bevorzuge, wie David Arno kommentiert, "einfaches altes Klassenobjekt", um Verbindungen zu bestimmten Sprachen oder Technologien zu vermeiden.
ZU KLARIFIZIEREN: Mit anderen Worten, sie stammen weder von einer speziellen Basisklasse ab, noch geben sie spezielle Typen für ihre Eigenschaften zurück.
Unten finden Sie jeweils ein Beispiel.
Beispiel eines POCO:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Beispiel für etwas, das kein POCO ist:
public class PersonComponent : System.ComponentModel.Component
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name { get; set; }
public int Age { get; set; }
}
Das obige Beispiel erbt beide von einer speziellen Klasse, um ihr zusätzliches Verhalten zu verleihen, und verwendet ein benutzerdefiniertes Attribut, um das Verhalten zu ändern. Für beide Klassen sind dieselben Eigenschaften vorhanden, aber eines ist nicht mehr nur ein einfaches altes Objekt.
Ich würde einen POCO als eine einfache alte Klasse betrachten, die nicht versucht, Teil des trendigen Mustersets zu sein. Ihre Antwort gefällt mir jedoch auch.
David Arno
1
Einverstanden - kein Fan des C # -Namens, aber das habe ich zum ersten Mal gehört, als ich mich über die Frage gewundert habe :) Klasse passt dann zu POJO, POVBO POC # O, POC ++ O, PORO usw.
David Mohundro
14
Dies gibt meiner persönlichen Meinung nach als jemand, der auch neugierig ist, keine wirklich gute Antwort. Ok, also keine Attribute, die die Infrastruktur beschreiben (was meinst du mit Attributen und Infrastruktur ... zum Beispiel eine DB-Verbindung? Was? Beispiel bitte). Welche Verantwortlichkeiten sollten Ihre Domain-Objekte nicht haben? POCO ist also im Grunde ein Domain-Objekt (BL-Objekt)? POCO ist also wirklich nur ein weiteres Akronym für ein Business-Layer-Objekt / Domain-Objekt, die alle dasselbe bedeuten. POCO / Business Layer Object / Domain Object == dasselbe verdammte Ding, nur 3 verschiedene Akronyme für dasselbe Konzept, oder?
PositiveGuy
4
Diese Antwort sagt mir absolut nichts darüber aus, was es in der realen Welt ist ... nur eine Definition, die jeder auf Wikipedia nachschlagen kann. Wie wäre es mit einigen Beispiel-POCO-Klassen? und warum sie im Kontext POCO sind.
PositiveGuy
1
Eine Klasse, die Sie geschrieben haben und von der Sie nur erben, System.Objectist beispielsweise ein POCO. Wenn es von ExternalFramework.OrmMapperBaseoder so etwas erbt , ist es kein POCO mehr.
David Mohundro
47
Die meisten Leute haben es gesagt - einfaches altes CLR-Objekt (im Gegensatz zum früheren POJO - einfaches altes Java-Objekt)
Das POJO stammt aus EJB, sodass Sie von einer bestimmten übergeordneten Klasse für Dinge wie Wertobjekte erben mussten (was Sie von einer Abfrage in einem ORM oder ähnlichem zurückerhalten), wenn Sie also jemals von EJB wechseln wollten (z. B. zu Frühling), du warst vollgestopft.
POJOs sind nur Klassen, die keine Vererbung oder Attributmarkierungen erzwingen, damit sie in dem von Ihnen verwendeten Framework "funktionieren".
POCOs sind bis auf .NET identisch.
Im Allgemeinen wird es für ORMs verwendet - ältere (und einige aktuelle) erfordern, dass Sie von einer bestimmten Basisklasse erben, die Sie an dieses Produkt bindet. Neuere nicht (nhibernate ist die Variante, die ich kenne) - Sie erstellen einfach eine Klasse, registrieren sie beim ORM und schon geht es los. Viel einfacher.
Nur der Vollständigkeit halber greift CLR auf Common Language Runtime zurück - die virtuelle .net-Maschine.
Philant
4
.Net 3.5 sp1 ORM-Beispiel: Das Entity-Framework erfordert, dass Klassen von einer bestimmten Framework-Klasse erben. Für LINQ to SQL ist diese Anforderung nicht erforderlich. Daher funktioniert LINQ to SQL mit POCOs und das Entity-Framework nicht.
Lucas
23
Ich kann mich irren, aber ich denke, POCO ist Plain Old Class CLR-Objekt der und es stammt von einem einfachen alten POJO-Java-Objekt. Ein POCO ist eine Klasse, die Daten enthält und kein Verhalten aufweist.
Dies sollte die akzeptierte Antwort sein. Es enthält die eigentliche Erklärung (es hat kein Verhalten) und ein Beispiel, um besser zu verstehen, wie ein POCO aussieht.
Héctor Álvarez
Ist die ToString () -Methode in diesem Beispiel nicht ein "Verhalten"?
jdoer1997
Ich würde darüber streiten, dass ein POCO kein Verhalten hat. Es ist einfach eine Klasse, die nicht von einem anderen Framework / einer anderen Bibliothek als .Net abhängt. Das heißt, die File-Klasse ist POCO, DbContext jedoch nicht, da dies vom Entity Framework abhängt.
ooooook? Was bedeutet das im Kontext oder in der realen Welt?
PositiveGuy
27
Und wie mein Elektrizitätslehrer an der High School sagen würde: "... und Orangen schmecken orange"
Ian Boyd
7
Richtig, aber dieser Beitrag sieht eher nach einem Kommentar als nach einer Antwort aus, da er die Frage nicht vollständig beantwortet.
Anar Khalilov
7
Um die anderen Antworten hinzuzufügen, scheinen alle POxx-Begriffe von POTS ( Plain old phone services ) zu stammen.
Der POX, der verwendet wurde, um einfaches (einfaches altes) XML zu definieren, und nicht das komplexe mehrschichtige Material, das mit REST, SOAP usw. verbunden ist, war ein nützlicher und vage amüsanter Begriff. PO (Sprache der Wahl einfügen) O Begriffe haben den Witz eher dünn getragen.
In Java bedeutet "PO" normalerweise "einfach alt". Der Rest kann schwierig sein, daher vermute ich, dass Ihr Beispiel (im Kontext von Java) "einfaches altes Klassenobjekt" ist.
Während ich sicher bin, dass POCO für 99,9% der Menschen hier ein einfaches altes Klassenobjekt oder ein einfaches altes C-Objekt bedeutet, ist POCO auch Animator Pro (Autodesk), das in Skriptsprache erstellt wurde.
POCO ist ein einfaches altes CLR-Objekt, das den Status und das Verhalten der Anwendung in Bezug auf ihre Problemdomäne darstellt. Es ist eine reine Klasse, ohne Vererbung, ohne Attribute. Beispiel:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
Antworten:
"Einfaches altes C # -Objekt"
Nur eine normale Klasse, keine Attribute, die Infrastrukturprobleme oder andere Verantwortlichkeiten beschreiben, die Ihre Domänenobjekte nicht haben sollten.
BEARBEITEN - wie andere Antworten angegeben haben, handelt es sich technisch gesehen um "einfaches altes CLR-Objekt", aber ich bevorzuge, wie David Arno kommentiert, "einfaches altes Klassenobjekt", um Verbindungen zu bestimmten Sprachen oder Technologien zu vermeiden.
ZU KLARIFIZIEREN: Mit anderen Worten, sie stammen weder von einer speziellen Basisklasse ab, noch geben sie spezielle Typen für ihre Eigenschaften zurück.
Unten finden Sie jeweils ein Beispiel.
Beispiel eines POCO:
Beispiel für etwas, das kein POCO ist:
Das obige Beispiel erbt beide von einer speziellen Klasse, um ihr zusätzliches Verhalten zu verleihen, und verwendet ein benutzerdefiniertes Attribut, um das Verhalten zu ändern. Für beide Klassen sind dieselben Eigenschaften vorhanden, aber eines ist nicht mehr nur ein einfaches altes Objekt.
quelle
System.Object
ist beispielsweise ein POCO. Wenn es vonExternalFramework.OrmMapperBase
oder so etwas erbt , ist es kein POCO mehr.Die meisten Leute haben es gesagt - einfaches altes CLR-Objekt (im Gegensatz zum früheren POJO - einfaches altes Java-Objekt)
Das POJO stammt aus EJB, sodass Sie von einer bestimmten übergeordneten Klasse für Dinge wie Wertobjekte erben mussten (was Sie von einer Abfrage in einem ORM oder ähnlichem zurückerhalten), wenn Sie also jemals von EJB wechseln wollten (z. B. zu Frühling), du warst vollgestopft.
POJOs sind nur Klassen, die keine Vererbung oder Attributmarkierungen erzwingen, damit sie in dem von Ihnen verwendeten Framework "funktionieren".
POCOs sind bis auf .NET identisch.
Im Allgemeinen wird es für ORMs verwendet - ältere (und einige aktuelle) erfordern, dass Sie von einer bestimmten Basisklasse erben, die Sie an dieses Produkt bindet. Neuere nicht (nhibernate ist die Variante, die ich kenne) - Sie erstellen einfach eine Klasse, registrieren sie beim ORM und schon geht es los. Viel einfacher.
quelle
Ich kann mich irren, aber ich denke, POCO ist Plain Old
ClassCLR-Objekt der und es stammt von einem einfachen alten POJO-Java-Objekt. Ein POCO ist eine Klasse, die Daten enthält und kein Verhalten aufweist.Hier ist ein Beispiel in C #:
quelle
POCO steht für "Plain Old CLR Object".
quelle
Um die anderen Antworten hinzuzufügen, scheinen alle POxx-Begriffe von POTS ( Plain old phone services ) zu stammen.
Der POX, der verwendet wurde, um einfaches (einfaches altes) XML zu definieren, und nicht das komplexe mehrschichtige Material, das mit REST, SOAP usw. verbunden ist, war ein nützlicher und vage amüsanter Begriff. PO (Sprache der Wahl einfügen) O Begriffe haben den Witz eher dünn getragen.
quelle
In .NET ist ein POCO ein 'einfaches altes CLR-Objekt'. Es ist kein 'einfaches altes C # -Objekt' ...
quelle
In Java bedeutet "PO" normalerweise "einfach alt". Der Rest kann schwierig sein, daher vermute ich, dass Ihr Beispiel (im Kontext von Java) "einfaches altes Klassenobjekt" ist.
einige andere Beispiele
quelle
Interessant. Das einzige, was ich wusste, das mit Programmierung zu tun hatte und POCO darin hatte, ist das POCO C ++ Framework .
quelle
In WPF MVVM-Begriffen ist eine POCO-Klasse eine Klasse, die keine PropertyChanged-Ereignisse auslöst
quelle
Während ich sicher bin, dass POCO für 99,9% der Menschen hier ein einfaches altes Klassenobjekt oder ein einfaches altes C-Objekt bedeutet, ist POCO auch Animator Pro (Autodesk), das in Skriptsprache erstellt wurde.
quelle
POCO ist ein einfaches altes CLR-Objekt, das den Status und das Verhalten der Anwendung in Bezug auf ihre Problemdomäne darstellt. Es ist eine reine Klasse, ohne Vererbung, ohne Attribute. Beispiel:
quelle