Может кто-нибудь определить, что именно означает «POCO»? Я сталкиваюсь с этим термином все чаще и чаще, и мне интересно, если речь идет только о простых классах или это означает нечто большее?
Может кто-нибудь определить, что именно означает «POCO»? Я сталкиваюсь с этим термином все чаще и чаще, и мне интересно, если речь идет только о простых классах или это означает нечто большее?
Ответы:
"Простой старый объект C #"
Просто обычный класс, без атрибутов, описывающих проблемы инфраструктуры или другие обязанности, которые не должны иметь ваши доменные объекты.
РЕДАКТИРОВАТЬ - как уже говорилось в других ответах, технически это «Простой старый объект CLR», но я, как и комментарии Дэвида Арно, предпочитаю «Простой старый объект класса», чтобы избежать связей с конкретными языками или технологиями.
УТОЧНИТЬ: Другими словами, они не являются производными от какого-то специального базового класса и не возвращают никаких специальных типов для своих свойств.
Ниже приведен пример каждого из них.
Пример 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.
Большинство людей сказали это - Простой старый объект CLR (в отличие от более раннего POJO - Простой старый объект Java)
POJO один вышел из EJB, который требовал от вас наследования от определенного родительского класса для таких вещей, как объекты-значения (что вы получаете от запроса в ORM или аналогичном), так что если вы когда-либо хотели перейти из EJB (например, в Весна), вы были чучела.
POJO - это просто классы, которые не вызывают наследование или разметку каких-либо атрибутов, чтобы заставить их «работать» в любой среде, которую вы используете.
POCO те же, за исключением .NET.
Как правило, он будет использоваться вокруг ORM - более старые (и некоторые текущие) требуют, чтобы вы наследовали от определенного базового класса, который связывает вас с этим продуктом. Более новых нет (nhibernate - вариант, который я знаю) - вы просто создаете класс, регистрируете его в ORM, и вы отключаетесь. Намного легче.
Я могу ошибаться в этом ... но в любом случае, я думаю, что POCO - это CLR-объект простого старого класса, и он происходит из простого старого 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 и т. Д., Был полезным и довольно забавным термином. П.О. (вставьте язык по выбору) О, термины довольно шумиха.
Интересный. Единственное, что я знал, что было связано с программированием и включало в себя 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; }
}