Визначення POCO


238

Чи може хтось визначити, що саме означає «POCO»? Я зустрічаю цей термін дедалі частіше, і мені цікаво, чи йдеться лише про прості заняття чи це означає щось більше?


27
Також смішно, що "poco" - іспанське слово, що означає "мало, не багато". Отже, це добре підходить до цього контексту! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue

6
Це означає те саме, що і в італійській мові :)
BlackBear

3
А португальською означає помилку, оскільки в ній написано: "pouco".
Ісмаїл

3
Мені звучить як PocoHaram :)
корисноБез

4
По-польськи "POCO" - питання "Навіщо його використовувати"
titol

Відповіді:


197

"Простий старий об'єкт 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; }
}

Наведений вище приклад успадковує спеціальний клас, щоб надати йому додаткову поведінку, а також використовує спеціальний атрибут для зміни поведінки ... однакові властивості існують для обох класів, але один вже не є просто простим старим об'єктом.


15
Я б розглядав POCO як звичайний старий клас, який не намагається бути частиною модного набору моделей. Однак мені подобається і ваша відповідь.
Девід Арно

1
Домовились - не шанувальник імені C #, але це те, що я вперше почув, коли мені було цікаво питання :) Клас потім підходить POJO, POVBO POC # O, POC ++ O, PORO тощо.
David Mohundro

14
Це насправді не дає гарної відповіді на мою особисту думку, оскільки хтось також цікавий. Добре, так що ніяких атрибутів, що описують інфраструктуру (що ви маєте на увазі під атрибутами та інфраструктурою ... з'єднання з БД, наприклад? Що? Приклад, будь ласка). Які обов'язки не повинні мати об’єкти вашого домену? Отже, POCO - це об'єкт домену (BL об'єкт) в основному? Тож POCO - це ще одна абревіатура для об'єкта бізнес-шару / об’єкта домену, який все означає ту саму прокляту річ. POCO / Business Layer Object / Domain Object == та сама проклята річ, лише 3 різних абревіатури для тієї самої концепції правильно?
PositiveGuy

4
ця відповідь не говорить мені абсолютно нічого про те, що це в реальному світі ... просто визначення, яке кожен може шукати у Вікіпедії. Як щодо прикладу класів POCO ?? і чому вони POCO в контексті.
PositiveGuy

1
Наприклад, клас, про який ви писали, який успадковує System.Objectлише POCO. Якщо він успадковує від цього ExternalFramework.OrmMapperBaseчи щось подібне, це вже не POCO.
Девід Мохундро

47

Більшість людей сказали це - Plain Old CLR Object (на відміну від попереднього POJO - Plain Old Java Object)

POJO вийшов із EJB, який вимагав від вас успадкування від певного батьківського класу для таких речей, як об'єкти цінності (що ви отримуєте з запиту в ORM або подібному), тож якщо ви коли-небудь хотіли перейти з EJB (наприклад, до Весна), ви були набиті.

POJO - це просто класи, які не змушують успадкувати або будь-яку розмітку атрибутів, щоб змусити їх "працювати" в будь-якій структурі, яку ви використовуєте.

POCO такі ж, за винятком .NET.

Як правило, він буде використовуватися навколо ORM - старіші (і деякі поточні) вимагають від вас успадкування від певного базового класу, який прив'язує вас до цього продукту. Новіші не роблять (я знаю варіант, який я знаю) - ви просто складаєте клас, реєструєте його в ORM, і ви виходите. Набагато простіше.


1
просто заради повноти, CLR встановлює загальну мову виконання - віртуальну машину .net.
благодійник

4
Приклад .Net 3.5 sp1 ORM: Entity Framework вимагає, щоб класи успадковували певний клас фрейму. LINQ для SQL не вимагає цієї вимоги. Тому LINQ до SQL працює з POCO, а Entity Framework не робить.
Лукас

23

Я можу помилятися з цього приводу .. але в будь-якому випадку, я думаю, що 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}";
    }
}

4
Це має бути прийнятою відповіддю. Він надає власне пояснення (у нього немає поведінки), а також є приклад для кращого розуміння того, як виглядає POCO.
Гектор Альварес

Чи не метод ToString () у цьому прикладі є "поведінкою"?
jdoer1997

Я б заперечував про те, що POCO не має поведінки. Це просто клас, який не залежить від інших фреймворків / бібліотеки, ніж .Net. Тобто клас File - це POCO, але DbContext це не тому, що залежить від Entity Framework.
користувач3285954

9

POCO означає "Простий старий об'єкт CLR".


24
ooooook? то що це означає в контексті чи реальному світі?
PositiveGuy

27
І як би сказав мій учитель з електроенергії у середній школі, "... і апельсини смакують апельсиновим кольором"
Ian Boyd

7
Правильно, але ця публікація більше схожа на коментар, ніж на відповідь, оскільки не відповідає повністю на питання.
анар халілов

7

Щоб додати інші відповіді, всі терміни POxx, як видається, походять від POTS ( Звичайні старі телефонні послуги ).

POX, який використовується для визначення простого (звичайного старого) XML, а не складного багатошарового матеріалу, пов’язаного з REST, SOAP тощо, був корисним і невиразно забавним терміном. PO (вставити мову за вибором) O терміни, швидше кажучи, розіграли жарт.


6

У .NET a POCO - це звичайний звичайний об'єкт CLR. Це не "Простий старий об'єкт C #" ...


5

У землі Java зазвичай "PO" означає "звичайний старий". Решта може бути складним, тому я здогадуюсь, що ваш приклад (в контексті Java) - це "звичайний старий об'єкт класу".

деякі інші приклади

  • POJO (звичайний старий об'єкт Java)
  • POJI (звичайний старий інтерфейс Java)



1

Хоча я впевнений, що POCO означає звичайний об’єкт старого класу або звичайний об’єкт C для 99,9% людей, POCO також є Animator Pro (Autodesk), побудований на мові сценаріїв.


0

POCO - звичайний старий об'єкт CLR, який представляє стан та поведінку програми з точки зору її проблемної області. це чистий клас, без успадкування, без будь-яких атрибутів. Приклад:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.