คำนิยาม 'POCO'


238

ใครสามารถกำหนดความหมายของ 'POCO' ได้อย่างแม่นยำ ฉันกำลังเผชิญกับคำบ่อยขึ้นและฉันสงสัยว่ามันเป็นเพียงเกี่ยวกับชั้นเรียนธรรมดาหรือมันหมายถึงอะไรบางอย่างมากขึ้น?


27
นอกจากนี้ยังตลกว่า "poco" เป็นคำภาษาสเปนที่มีความหมายว่า "น้อยไม่มาก" ดังนั้นจึงเหมาะกับบริบทนี้เป็นอย่างดี! en.wiktionary.org/wiki/poco
— EnocNRoll - AnandaGopal Pardue

6
มันหมายความว่าสิ่งเดียวที่แน่นอนในอิตาลีมากเกินไป :)
— BlackBear

3
และในภาษาโปรตุเกสหมายถึงข้อผิดพลาดเพราะมันสะกด: "pouco"
— Ismael

3
เสียงเหมือน PocoHaram สำหรับฉัน :)
— ประโยชน์ 18

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; }
}

ตัวอย่างด้านบนทั้งสองสืบทอดมาจากคลาสพิเศษเพื่อให้มันเพิ่มเติมพฤติกรรมเช่นเดียวกับการใช้คุณลักษณะที่กำหนดเองเพื่อเปลี่ยนพฤติกรรม ... คุณสมบัติเดียวกันที่มีอยู่ในทั้งสองชั้นเรียน แต่หนึ่งไม่ได้เป็นเพียงวัตถุเก่าธรรมดาอีกต่อไป


15
ฉันจะดู POCO เป็นคลาสเก่าธรรมดาที่ไม่ได้พยายามเป็นส่วนหนึ่งของชุดรูปแบบที่ทันสมัย อย่างไรก็ตามฉันชอบคำตอบของคุณด้วย
— David Arno

1
เห็นด้วย - ไม่ใช่แฟนของชื่อ C # แต่นั่นคือสิ่งที่ฉันได้ยินครั้งแรกเมื่อฉันสงสัยเกี่ยวกับคำถาม :) คลาสเหมาะกับ POJO, POVBO POC # O, POC ++ O, PORO ฯลฯ
— David Mohundro

14
สิ่งนี้ไม่ได้ให้คำตอบที่ดีในความเห็นส่วนตัวของฉันเพราะมีคนอยากรู้อยากเห็น ตกลงดังนั้นจึงไม่มีแอตทริบิวต์ที่อธิบายโครงสร้างพื้นฐาน (คุณหมายถึงอะไรโดยคุณลักษณะและโครงสร้างพื้นฐาน ... การเชื่อมต่อฐานข้อมูลเช่นอะไรตัวอย่างโปรด) วัตถุโดเมนของคุณควรมีความรับผิดชอบอะไรบ้าง? POCO เป็นวัตถุโดเมน (วัตถุ BL) โดยทั่วไปหรือไม่ POCO จริงๆแล้วเป็นเพียงตัวย่อของ Business Layer Object / Domain Object ซึ่งทั้งหมดหมายถึงสิ่งที่เหมือนกัน POCO / Business Layer Object / Domain Object == สิ่งที่เจ้ากรรมเดียวกันมีเพียง 3 ตัวย่อที่แตกต่างกันสำหรับแนวคิดเดียวกันใช่ไหม?
— PositiveGuy

4
คำตอบนี้ไม่ได้บอกอะไรเลยเกี่ยวกับสิ่งที่อยู่ในโลกแห่งความเป็นจริง ... เป็นเพียงคำจำกัดความที่ทุกคนสามารถค้นหาบนวิกิพีเดีย POCO เป็นตัวอย่างเกี่ยวกับคลาสอย่างไร? และทำไมจึงเป็น POCO ในบริบท
— PositiveGuy

1
ตัวอย่างเช่นคลาสที่คุณเขียนว่าสืบทอดมาจากSystem.ObjectPOCO เท่านั้น ถ้ามันสืบทอดมาจากExternalFramework.OrmMapperBaseอะไรทำนองนั้นมันก็ไม่ใช่ POCO อีกต่อไป
— David Mohundro

47

คนส่วนใหญ่พูดว่ามัน - วัตถุ CLR แบบเก่าธรรมดา (ตรงข้ามกับ POJO ก่อนหน้า - วัตถุ Java แบบเก่าแบบธรรมดา)

POJO อันหนึ่งออกมาจาก EJB ซึ่งต้องการให้คุณสืบทอดจากคลาสพาเรนต์เฉพาะสำหรับสิ่งต่าง ๆ เช่นค่าวัตถุ (สิ่งที่คุณได้รับจากการสืบค้นใน ORM หรือที่คล้ายกัน) ดังนั้นหากคุณต้องการย้ายจาก EJB (เช่น ฤดูใบไม้ผลิ) คุณถูกยัด

POJO เป็นเพียงคลาสที่ไม่บังคับให้สืบทอดหรือมาร์กอัปแอ็ตทริบิวต์ใด ๆ เพื่อให้พวกเขา "ทำงาน" ในสิ่งที่คุณใช้

POCO เหมือนกันยกเว้นใน. NET

โดยทั่วไปจะใช้รอบ ORM ของ - เก่ากว่า (และบางปัจจุบัน) ต้องการให้คุณได้รับมรดกจากชั้นฐานที่เฉพาะเจาะจงซึ่งผูกคุณกับผลิตภัณฑ์นั้น ใหม่กว่าคน dont (nhibernate เป็นตัวแปรฉันรู้) - คุณเพียงแค่ทำการเรียนลงทะเบียนกับ ORM และคุณจะปิด ง่ายกว่ามาก.


1
เพื่อความสมบูรณ์ CLR stabds สำหรับ Common Language Runtime - เครื่องเสมือน. net
— philant

4
ตัวอย่าง. Net 3.5 sp1 ORM: Framework Entity ต้องการให้คลาสนั้นสืบทอดมาจากคลาส Framework ที่แน่นอน LINQ ไปยัง SQL ไม่มีข้อกำหนดนี้ ดังนั้น LINQ ไปยัง SQL จะทำงานกับ POCO และ Entity Framework ไม่ได้
— Lucas

23

ฉันอาจจะผิดเกี่ยวกับเรื่องนี้ .. แต่อย่างไรก็ตามฉันคิดว่า POCO เป็นระดับเก่าธรรมดา CLR วัตถุและมันมาจาก POJO ธรรมดาเก่าวัตถุ Java 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 ที่ไม่มีพฤติกรรม มันเป็นเพียงคลาสที่ไม่ได้ขึ้นอยู่กับเฟรมเวิร์ก / ไลบรารีอื่น ๆ นั่นคือคลาสไฟล์คือ POCO แต่ DbContext ไม่ได้ขึ้นอยู่กับ Entity Framework
— user3285954

9

POCO ย่อมาจาก "Plain Old CLR Object"


24
ooooook? ดังนั้นสิ่งที่หมายความว่าในบริบทหรือโลกแห่งความจริง?
— PositiveGuy

27
และอย่างที่ครูสอนการไฟฟ้าระดับมัธยมปลายของฉันจะพูดว่า "... และส้มจะได้ชิมรสส้ม"
— Ian Boyd

7
ใช่ แต่โพสต์นี้ดูเหมือนว่ามีความคิดเห็นมากกว่าคำตอบเพราะมันไม่ได้ตอบคำถามอย่างสมบูรณ์
— anar khalilov

7

หากต้องการเพิ่มคำตอบอื่น ๆ ข้อกำหนด POxx ทั้งหมดดูเหมือนจะเกิดจาก POTS ( บริการโทรศัพท์ธรรมดาธรรมดา )

POX ที่ใช้ในการกำหนด XML แบบธรรมดา (แบบธรรมดา) แทนที่จะเป็นสิ่งที่ซับซ้อนหลายชั้นที่เกี่ยวข้องกับ REST, SOAP ฯลฯ เป็นคำที่มีประโยชน์และน่าขบขัน PO (แทรกภาษาที่เลือก) คำศัพท์ O ค่อนข้างตลกเล็กน้อย


6

ใน. NET POCO คือ 'วัตถุ CLR เก่าแบบธรรมดา' มันไม่ใช่ 'วัตถุเก่า C # ธรรมดา' ...


5

ในดินแดน Java โดยทั่วไป "PO" หมายถึง "ธรรมดา" ที่เหลืออาจเป็นเรื่องยากดังนั้นฉันเดาว่าตัวอย่างของคุณ (ในบริบทของ Java) คือ "วัตถุคลาสเก่าแบบธรรมดา"

ตัวอย่างอื่น ๆ

  • POJO (วัตถุ java เก่าธรรมดา)
  • POJI (อินเตอร์เฟส java เก่าธรรมดา)

3

น่าสนใจ สิ่งเดียวที่ฉันรู้ว่าจะทำอย่างไรกับการเขียนโปรแกรมและมี POCO ในนั้นเป็นกรอบ POCO C ++



1

ในขณะที่ฉันแน่ใจว่า POCO หมายถึงวัตถุระดับเก่าธรรมดาหรือวัตถุวัตถุเก่าแบบธรรมดาถึง 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.