Может кто-нибудь определить, что именно означает «POCO»? Я сталкиваюсь с этим термином все чаще и чаще, и мне интересно, если речь идет только о простых классах или это означает нечто большее?
Также забавно, что «poco» - это испанское слово, означающее «мало, не много». Таким образом, это хорошо вписывается в этот контекст! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue
6
То же самое на итальянском означает то же самое :)
BlackBear
3
А по-португальски означает ошибку, потому что пишется: «pouco».
Исмаэль
3
Похоже, PocoHaram для меня :)
полезноBee
4
В польском «POCO» есть вопрос «Зачем его использовать»
titol
Ответы:
197
"Простой старый объект 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; }
}
Приведенный выше пример оба наследует от специального класса, чтобы придать ему дополнительное поведение, а также использует пользовательский атрибут для изменения поведения ... одинаковые свойства существуют в обоих классах, но один больше не является простым старым объектом.
Я бы рассматривал POCO как простой старый класс, который не пытается быть частью модного набора паттернов. Однако мне тоже нравится ваш ответ.
Дэвид Арно
1
Согласен - не фанат названия C #, но это было то, что я впервые услышал, когда задавался вопросом об этом вопросе :) Класс подходит для POJO, POVBO POC # O, POC ++ O, PORO и т. Д.
David Mohundro
14
Это не дает хорошего ответа, по моему личному мнению, поскольку кому-то также любопытно. Итак, нет атрибутов, описывающих инфраструктуру (что вы подразумеваете под атрибутами и инфраструктурой ... например, соединение с БД? Что? Пример, пожалуйста). Какими обязанностями не должны обладать ваши доменные объекты? Итак, POCO - это доменный объект (BL-объект) в принципе? Так что на самом деле POCO - это просто еще одна аббревиатура для объекта бизнес-уровня / объекта домена, которые все означают одно и то же. POCO / объект бизнес-уровня / объект домена == одна и та же проклятая вещь, только 3 разных аббревиатуры для одной и той же концепции, верно?
PositiveGuy
4
этот ответ абсолютно ничего не говорит мне о том, что это такое в реальном мире ... просто определение, которое каждый может найти в Википедии. Как насчет примеров классов POCO? и почему они POCO в контексте.
PositiveGuy
1
Например, класс, который вы написали и наследует только от него, System.Objectявляется POCO. Если он наследует ExternalFramework.OrmMapperBaseили что-то в этом роде, это уже не POCO.
Дэвид Мохундро
47
Большинство людей сказали это - Простой старый объект CLR (в отличие от более раннего POJO - Простой старый объект Java)
POJO один вышел из EJB, который требовал от вас наследования от определенного родительского класса для таких вещей, как объекты-значения (что вы получаете от запроса в ORM или аналогичном), так что если вы когда-либо хотели перейти из EJB (например, в Весна), вы были чучела.
POJO - это просто классы, которые не вызывают наследование или разметку каких-либо атрибутов, чтобы заставить их «работать» в любой среде, которую вы используете.
POCO те же, за исключением .NET.
Как правило, он будет использоваться вокруг ORM - более старые (и некоторые текущие) требуют, чтобы вы наследовали от определенного базового класса, который связывает вас с этим продуктом. Более новых нет (nhibernate - вариант, который я знаю) - вы просто создаете класс, регистрируете его в ORM, и вы отключаетесь. Намного легче.
для полноты картины CLR использует Common Language Runtime - виртуальную машину .net.
Филант
4
Пример .Net 3.5 sp1 ORM: платформа Entity требует, чтобы классы наследовали от определенного класса инфраструктуры. LINQ to SQL не имеет этого требования. Поэтому LINQ to SQL работает с POCO, а платформа Entity - нет.
Лукас
23
Я могу ошибаться в этом ... но в любом случае, я думаю, что POCO - это CLR-объект простого старого класса, и он происходит из простого старого Java-объекта POJO. POCO - это класс, который содержит данные и не имеет поведения.
Это должен быть принятый ответ. Это обеспечивает фактическое объяснение (у него нет поведения), а также есть пример для лучшего понимания того, как выглядит POCO.
Эктор Альварес
Разве метод ToString () в этом примере не является «поведением»?
jdoer1997
Я бы поспорил о POCO, не имеющем поведения. Это просто класс, который не зависит от других фреймворков / библиотек, кроме .Net. Т.е. класс File - это POCO, но DbContext - не потому, что зависит от Entity Framework.
user3285954
9
POCO расшифровывается как «Простой старый объект CLR».
POX, используемый для определения простого (простого старого) XML, а не сложного многослойного материала, связанного с REST, SOAP и т. Д., Был полезным и довольно забавным термином. П.О. (вставьте язык по выбору) О, термины довольно шумиха.
На земле Java, как правило, «PO» означает «простой старый». Остальное может быть сложным, поэтому я предполагаю, что ваш пример (в контексте Java) - «объект старого класса».
Хотя я уверен, что POCO означает «Простой старый класс» или «Простой старый объект C» для 99,9% людей, POCO также является встроенным языком сценариев Animator Pro (Autodesk).
POCO - это простой старый объект CLR, который представляет состояние и поведение приложения с точки зрения его проблемной области. это чистый класс, без наследования, без каких-либо атрибутов. Пример:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
Ответы:
"Простой старый объект C #"
Просто обычный класс, без атрибутов, описывающих проблемы инфраструктуры или другие обязанности, которые не должны иметь ваши доменные объекты.
РЕДАКТИРОВАТЬ - как уже говорилось в других ответах, технически это «Простой старый объект CLR», но я, как и комментарии Дэвида Арно, предпочитаю «Простой старый объект класса», чтобы избежать связей с конкретными языками или технологиями.
УТОЧНИТЬ: Другими словами, они не являются производными от какого-то специального базового класса и не возвращают никаких специальных типов для своих свойств.
Ниже приведен пример каждого из них.
Пример POCO:
Пример чего-то, что не является POCO:
Приведенный выше пример оба наследует от специального класса, чтобы придать ему дополнительное поведение, а также использует пользовательский атрибут для изменения поведения ... одинаковые свойства существуют в обоих классах, но один больше не является простым старым объектом.
источник
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 #:
источник
POCO расшифровывается как «Простой старый объект CLR».
источник
Чтобы добавить другие ответы, все термины POxx, кажется, происходят из POTS ( простые старые телефонные услуги ).
POX, используемый для определения простого (простого старого) XML, а не сложного многослойного материала, связанного с REST, SOAP и т. Д., Был полезным и довольно забавным термином. П.О. (вставьте язык по выбору) О, термины довольно шумиха.
источник
В .NET POCO - это «Простой старый объект CLR». Это не «Простой старый объект C #» ...
источник
На земле Java, как правило, «PO» означает «простой старый». Остальное может быть сложным, поэтому я предполагаю, что ваш пример (в контексте Java) - «объект старого класса».
некоторые другие примеры
источник
Интересный. Единственное, что я знал, что было связано с программированием и включало в себя POCO, это фреймворк POCO C ++ .
источник
В терминах WPF MVVM класс POCO - это класс, который не генерирует события PropertyChanged.
источник
Хотя я уверен, что POCO означает «Простой старый класс» или «Простой старый объект C» для 99,9% людей, POCO также является встроенным языком сценариев Animator Pro (Autodesk).
источник
POCO - это простой старый объект CLR, который представляет состояние и поведение приложения с точки зрения его проблемной области. это чистый класс, без наследования, без каких-либо атрибутов. Пример:
источник