Plain old CLR object
Ein Plain Old CLR Object (zu Deutsch: einfaches altes CLR Objekt) oder ein Plain Old Class Object (zu Deutsch: einfaches altes Klassen-Objekt) – kurz: POCO – ist in der Programmierung ein einfaches Objekt, das in der .NET Common Language Runtime (CLR) erstellt wurde und nicht durch Vererbung oder Attribute belastet ist. Dies wird häufig im Gegensatz zu den komplexen oder spezialisierten Objekten verwendet, die objektrelationale Abbildungs-Frameworks häufig benötigen[1]. Im Wesentlichen ist ein POCO nicht von einem externen Framework abhängig.
Etymologie
Plain Old CLR Object[2] ist ein Kunstbegriff, welcher von plain old Java object aus der Jakarta-EE-Programmierwelt abgeleitet und durch Martin Fowler im Jahr 2000 geprägt wurde. POCO wird häufig in Verbindung mit C#-Objekten verwendet, obwohl POCO-Klassen/-Objekte auch mit anderen Programmiersprachen erstellt werden können. Ein anderes alternatives Akronym dafür ist Plain Old .NET Object.
Vorteile
Einige Vorteile von POCOs sind:
- ermöglicht einen einfachen Speichermechanismus für Daten und vereinfacht die Serialisierung und das Weiterleiten von Daten durch Schichten
- geht Hand in Hand mit Dependency Injection und die Repository Entwurfsmuster (OOP)
- Minimierte Komplexität und Abhängigkeiten von anderen Schichten (höhere Schichten kümmern sich nur um die POCOs, POCOs kümmern sich um Nichts), was eine lose Kopplung erleichtert
- erhöht die Testbarkeit durch Vereinfachung
Beispiel
// Diese Klasse ist keine POCO Klasse!
public class Person : IDisposable
{
private static readonly ILogger Logger = LoggerFactory.Create(typeof(Person));
public Person() {}
public Person(int id, string firstName, string lastName, DateTime birthDate)
{
Id = id;
FirstName = firstName;
LastName = lastName;
BirthDate = birthDate;
}
[Category("Data")]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string GetName()
{
return $"{FirstName} {LastName}";
}
public override string ToString()
=> $"Id:{Id}, FirstName:{FirstName}, LastName:{LastName}, BirthDate:{BirthDate}";
public void Dispose() {/* Code...*/}
}
// Diese Klasse ist eine POCO Klasse.
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
}
Einzelnachweise
- HongGit: POCO-Unterstützung - WCF. Abgerufen am 16. März 2021 (deutsch).
- HongGit: POCO-Unterstützung - WCF. Abgerufen am 16. März 2021 (deutsch).