Чи може хтось визначити, що саме означає «POCO»? Я зустрічаю цей термін дедалі частіше, і мені цікаво, чи йдеться лише про прості заняття чи це означає щось більше?
Чи може хтось визначити, що саме означає «POCO»? Я зустрічаю цей термін дедалі частіше, і мені цікаво, чи йдеться лише про прості заняття чи це означає щось більше?
Відповіді:
"Простий старий об'єкт C #"
Просто звичайний клас, ніяких атрибутів, що описують проблеми з інфраструктурою чи інші обов'язки, яких не повинно мати об’єкти вашого домену.
EDIT - як було сказано в інших відповідях, технічно це "Plain Old CLR Object", але я, як і зауваження Девіда Арно, віддаю перевагу "Plain Old Class Object", щоб уникнути зв'язку з певними мовами чи технологіями.
ДЛЯ ВИЗНАЧЕННЯ: Іншими словами, вони не походять з якогось спеціального базового класу, а також не повертають особливих типів за своїми властивостями.
Нижче див. Приклад кожного.
Приклад POCO:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Приклад чогось, що не є POCO:
public class PersonComponent : System.ComponentModel.Component
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name { get; set; }
public int Age { get; set; }
}
Наведений вище приклад успадковує спеціальний клас, щоб надати йому додаткову поведінку, а також використовує спеціальний атрибут для зміни поведінки ... однакові властивості існують для обох класів, але один вже не є просто простим старим об'єктом.
System.Object
лише POCO. Якщо він успадковує від цього ExternalFramework.OrmMapperBase
чи щось подібне, це вже не POCO.
Більшість людей сказали це - Plain Old CLR Object (на відміну від попереднього POJO - Plain Old Java Object)
POJO вийшов із EJB, який вимагав від вас успадкування від певного батьківського класу для таких речей, як об'єкти цінності (що ви отримуєте з запиту в ORM або подібному), тож якщо ви коли-небудь хотіли перейти з EJB (наприклад, до Весна), ви були набиті.
POJO - це просто класи, які не змушують успадкувати або будь-яку розмітку атрибутів, щоб змусити їх "працювати" в будь-якій структурі, яку ви використовуєте.
POCO такі ж, за винятком .NET.
Як правило, він буде використовуватися навколо ORM - старіші (і деякі поточні) вимагають від вас успадкування від певного базового класу, який прив'язує вас до цього продукту. Новіші не роблять (я знаю варіант, який я знаю) - ви просто складаєте клас, реєструєте його в ORM, і ви виходите. Набагато простіше.
Я можу помилятися з цього приводу .. але в будь-якому випадку, я думаю, що POCO - це звичайний об'єкт CLR Old Class, і він походить від звичайного старого об'єкта Java POJO. POCO - це клас, який зберігає дані і не має поведінки.
Ось приклад, написаний на 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 означає "Простий старий об'єкт CLR".
Щоб додати інші відповіді, всі терміни POxx, як видається, походять від POTS ( Звичайні старі телефонні послуги ).
POX, який використовується для визначення простого (звичайного старого) XML, а не складного багатошарового матеріалу, пов’язаного з REST, SOAP тощо, був корисним і невиразно забавним терміном. PO (вставити мову за вибором) O терміни, швидше кажучи, розіграли жарт.
Цікаво. Єдине, що я знав, що стосується програмування, і в ньому був POCO, це рамка POCO C ++ .
У термінах WPF MVVM, клас POCO - це той, який не запускає події PropertyChanged
Хоча я впевнений, що POCO означає звичайний об’єкт старого класу або звичайний об’єкт C для 99,9% людей, POCO також є Animator Pro (Autodesk), побудований на мові сценаріїв.
POCO - звичайний старий об'єкт CLR, який представляє стан та поведінку програми з точки зору її проблемної області. це чистий клас, без успадкування, без будь-яких атрибутів. Приклад:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}