Definicja "POCO"

Czy ktoś może zdefiniować co dokładnie znaczy "POCO"? Coraz częściej spotykam się z tym terminem i zastanawiam się, czy chodzi tylko o zwykłe klasy, czy znaczy coś więcej?

 245
Author: Gustavo Mori, 2008-10-30

11 answers

"Zwykły Stary Obiekt C#"

Zwykła Klasa, bez atrybutów opisujących problemy z infrastrukturą lub inne obowiązki, których obiekty domeny nie powinny mieć.

EDIT-jak stwierdziły inne odpowiedzi, jest to technicznie "zwykły stary obiekt CLR", ale ja, podobnie jak Komentarze Davida Arno, wolę "zwykły stary obiekt klasy", aby uniknąć powiązań z konkretnymi językami lub technologiami.

Dla wyjaśnienia: innymi słowy, nie wywodzą się z jakiejś specjalnej klasie bazowej, ani nie zwracają żadnej specjalne typy dla ich właściwości.

Poniżej znajduje się przykład każdego z nich.

Przykład POCO:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }
}

Przykład czegoś, co nie jest POCO:

public class PersonComponent : System.ComponentModel.Component
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string Name { get; set; }

    public int Age { get; set; }
}

Powyższy przykład dziedziczy ze specjalnej klasy, aby nadać jej dodatkowe zachowanie, jak również używa niestandardowego atrybutu do zmiany zachowania... te same właściwości istnieją na obu klasach, ale jedna z nich to Nie tylko zwykły stary obiekt.

 207
Author: David Mohundro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-22 21:06:58

Większość ludzi to mówi - zwykły stary obiekt CLR (w przeciwieństwie do wcześniejszego POJO - zwykły stary obiekt Java)

POJO wyszło z EJB, co wymagało dziedziczenia od określonej klasy nadrzędnej dla rzeczy takich jak obiekty wartości (co otrzymujesz z zapytania w ORM lub podobnym), więc jeśli kiedykolwiek chciałeś przejść z EJB (np. do Spring), zostałeś wypchany.

POJO są tylko klasami, które nie wymuszają dziedziczenia lub znaczników atrybutów, aby "działały" w jakimkolwiek framework, którego używasz.

POCO są takie same, z wyjątkiem .NET.

Ogólnie będzie używany wokół ORM-starsze (i niektóre obecne) wymagają dziedziczenia z określonej klasy bazowej, która wiąże cię z tym produktem. Nowsze nie (NHibernate to wariant, który znam) - po prostu robisz klasę, rejestrujesz ją w ORM i jesteś wyłączony. Dużo łatwiej.

 50
Author: Nic Wise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 13:15:33

Mogę się mylić.. ale tak czy inaczej, myślę, że POCO to zwykły stary obiekt Class CLR i pochodzi od POJO plain old Java Object. POCO to klasa, która przechowuje Dane i nie ma żadnych zachowań.

Oto przykład napisany w 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}";
    }
}
 25
Author: Viking jonsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-16 13:00:38

POCO oznacza "zwykły stary obiekt CLR".

 9
Author: Robert Gamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 12:32:52

Aby dodać pozostałe odpowiedzi, wszystkie terminy POxx wydają się pochodzić z POTS ( zwykłe stare Usługi telefoniczne).

POX, używany do definiowania prostego (zwykłego starego) XML, a nie złożonych wielowarstwowych rzeczy związanych z odpoczynkiem, mydłem itp., był użytecznym i mgliście zabawnym terminem. Po (wstawić język z wyboru)o terminy raczej nosić żart cienki.

 7
Author: David Arno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-30 12:38:36

[[0]} W. NET POCO jest 'zwykłym starym obiektem CLR'. Nie jest to " zwykły stary obiekt C#"...

 7
Author: Hardgraf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-13 16:20:49

W języku Java typowo "PO" oznacza "zwykły stary". Reszta może być trudna, więc zgaduję ,że twój przykład (w kontekście Javy) to "zwykły stary obiekt klasy".

Kilka innych przykładów

  • POJO (plain old java object)
  • POJI (plain old java interface)
 5
Author: basszero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-16 06:30:30

Ciekawe. Jedyne, co wiedziałem, że ma coś wspólnego z programowaniem i ma w nim POCO, to POCO C++ framework .

 3
Author: ayaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-16 06:41:58

W Warunkach WPF MVVM Klasa POCO to taka, która nie odpala zdarzeń Właściwości

 2
Author: Null Pointer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-01 08:22:39

Chociaż jestem pewien, że POCO oznacza zwykły stary obiekt klasy lub zwykły stary obiekt C dla 99,9% ludzi tutaj, POCO jest również Animator Pro (Autodesk) zbudowany w języku skryptowym.

 1
Author: Mr Mystery Guest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 14:36:11

POCO to zwykły stary obiekt CLR, który reprezentuje stan i zachowanie aplikacji pod względem jej domeny problemowej. jest to klasa czysta, bez dziedziczenia, bez żadnych atrybutów. Przykład:

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

    public string Name { get; set; }
}
 0
Author: Mohammad Kamel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-25 04:04:35