'POCO'정의


238

누군가 'POCO'가 정확히 무엇을 의미하는지 정의 할 수 있습니까? 나는이 용어를 점점 더 자주 만나고 있는데, 그것이 일반 수업에 관한 것인지 아니면 더 의미가 있는지 궁금합니다.


27
"poco"가 "작지만 많지 않다"를 의미하는 스페인어 단어라는 것도 재미있다. 따라서이 컨텍스트에 잘 맞습니다! en.wiktionary.org/wiki/poco
— EnocNRoll-AnandaGopal Pardue

6
그것은 이탈리아어에서도 똑같은 것을 의미합니다 :)
— BlackBear

3
그리고 포르투갈어에서는 철자가 "pouco"이므로 철자가 잘못되었습니다.
— Ismael

3
나에게 PocoHaram 같은 소리 :)
— usefulBee

4
폴란드어로 "POCO"는 "왜 그것을 사용해야합니까?"라는 질문입니다.
— titol

답변:


197

"일반적인 오래된 C # 개체"

인프라 스트럭처 관련 사항이나 도메인 객체가 가지고 있지 않은 기타 책임을 설명하는 속성이없는 일반 클래스 일뿐입니다.

편집-다른 답변에서 언급했듯이 기술적으로는 "Plain Old CLR Object"이지만 David Arno의 의견처럼 특정 언어 또는 기술과의 관계를 피하기 위해 "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를 트렌디 한 패턴 세트의 일부로 사용하지 않는 평범한 오래된 클래스로 생각합니다. 그러나 나는 당신의 대답도 좋아합니다.
— David Arno

1
동의-C # 이름의 팬은 아니지만 질문에 대해 궁금 할 때 처음 들었던 것입니다 :) 클래스는 POJO, POVBO POC # O, POC ++ O, PORO 등에 적합합니다.
— David Mohundro

14
이것은 누군가도 호기심을 느끼면서 개인적으로 좋은 대답을하지는 않습니다. 좋아, 인프라를 설명하는 속성이 없습니다 (속성 및 인프라에 의해 무엇을 의미합니까 ... 예를 들어 DB 연결? 무엇을 예입니까?). 도메인 객체에는 어떤 책임이 없어야합니까? 따라서 POCO는 기본적으로 도메인 개체 (BL 개체)입니까? 실제로 POCO는 비즈니스 계층 개체 / 도메인 개체의 또 다른 약어 일뿐입니다. POCO / Business Layer Object / Domain Object == 같은 개념, 같은 개념에 대해 단지 3 개의 다른 약어?
— PositiveGuy

4
이 답변은 현실 세계에 무엇이 있는지 전혀 알려주지 않습니다. 단지 위키피디아에서 누구나 볼 수있는 정의 일뿐입니다. POCO 클래스 예제는 어떻습니까? 그리고 문맥 상 왜 POCO인가?
— PositiveGuy

1
예를 들어, 상속받은 클래스 System.Object는 POCO입니다. 그것이 ExternalFramework.OrmMapperBase또는 그와 비슷한 것을 상속 받으면 더 이상 POCO가 아닙니다.
— David Mohundro

47

대부분의 사람들은 평범한 CLR 객체 (이전의 POJO-평범한 자바 객체와 반대)

POJO 하나는 EJB에서 나왔습니다. 이것은 ORM 또는 그와 비슷한 쿼리에서 반환 된 값 객체와 같은 것에 대해 특정 부모 클래스에서 상속해야하므로 EJB에서 이동하려는 경우 (예 : 봄), 당신은 박제했다.

POJO는 상속 또는 속성 마크 업을 사용하여 프레임 워크에서 "작동"하도록 강요하지 않는 클래스입니다.

POCO는 .NET을 제외하고 동일합니다.

일반적으로 ORM 주변에서 사용됩니다-더 오래된 (및 현재의 일부는) 특정 기본 클래스에서 상속해야합니다.이 클래스는 해당 제품과 연결되어 있습니다. 새로운 것들은 dont합니다 (내가 아는 변형이기 때문에 최대 절전 모드)-당신은 수업을 만들고 ORM에 등록하면 당신은 벗어납니다. 훨씬 쉽게.


1
완전성을 위해 CLR은 공용 언어 런타임 (.net 가상 머신)을위한 stabd입니다.
— philant

4
.Net 3.5 sp1 ORM 예 : Entity 프레임 워크에서는 클래스가 특정 프레임 워크 클래스에서 상속되어야합니다. LINQ to SQL에는이 요구 사항이 없습니다. 따라서 LINQ to SQL은 POCO와 작동하지만 Entity 프레임 워크는 작동하지 않습니다.
— Lucas

23

나는 이것에 대해 틀릴지도 모른다. 그러나 어쨌든, POCO는 Plain Old Class CLR Object이고 POJO plain old Java Object에서 온 것이라고 생각한다 . 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의 모양을 더 잘 이해하기위한 예도 제공합니다.
— Héctor Álvarez

이 예제에서 ToString () 메소드가 "행동"이 아닙니까?
— jdoer1997

나는 행동이없는 POCO에 대해 논쟁 할 것이다. .Net 이외의 다른 프레임 워크 / 라이브러리에 의존하지 않는 클래스 일뿐입니다. 즉, File 클래스는 POCO이지만 Entity Framework에 의존하기 때문에 DbContext는 아닙니다.
— user3285954

9

POCO는 "Plain Old CLR Object"의 약자입니다.


24
ooooook? 문맥이나 현실에서 무슨 의미입니까?
— PositiveGuy

27
그리고 고등학교 전기 교사가 말하듯이 "... 오렌지는 오렌지 맛이납니다"
— Ian Boyd

7
그렇습니다. 그러나이 게시물은 질문에 완전히 답변하지 않기 때문에 답변이 아니라 더 많은 주석처럼 보입니다.
— anar khalilov

7

다른 답변을 추가하기 위해 POxx 용어는 모두 POTS ( Plain old telephone services ) 에서 나온 것으로 보입니다 .

REST, SOAP 등과 관련된 복잡한 다중 계층 구조가 아닌 단순한 (일반적인) XML을 정의하는 데 사용 된 POX는 유용하고 모호한 용어였습니다. PO (선택 언어 삽입) O 용어가 농담을 얇게 입었습니다.


6

.NET에서 POCO는 'Plain old CLR Object'입니다. 'Plain old C # 객체'가 아닙니다 ...


5

Java 토지에서 일반적으로 "PO"는 "일반"을 의미합니다. 나머지는 까다로울 수 있으므로 (자바의 맥락에서) 귀하의 예가 "일반 클래스 객체"라고 생각합니다.

다른 예

  • POJO (일반 오래된 Java 오브젝트)
  • POJI (일반적인 Java 인터페이스)


2

WPF MVVM 용어에서 POCO 클래스는 PropertyChanged 이벤트를 발생시키지 않는 클래스입니다.


1

POCO가 Plain Old Class Object 또는 Plain Old C Object를 99.9 %의 사람들에게 의미한다고 확신하지만 POCO는 스크립트 언어로 작성된 Animator Pro (Autodesk)이기도합니다.


0

POCO는 문제가있는 도메인 측면에서 애플리케이션의 상태와 동작을 나타내는 평범한 오래된 CLR 객체입니다. 상속이없고 속성이없는 순수한 클래스입니다. 예:

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

    public string Name { get; set; }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.