'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.