คำนิยาม '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.