ใครสามารถกำหนดความหมายของ 'POCO' ได้อย่างแม่นยำ ฉันกำลังเผชิญกับคำบ่อยขึ้นและฉันสงสัยว่ามันเป็นเพียงเกี่ยวกับชั้นเรียนธรรมดาหรือมันหมายถึงอะไรบางอย่างมากขึ้น?
ใครสามารถกำหนดความหมายของ 'POCO' ได้อย่างแม่นยำ ฉันกำลังเผชิญกับคำบ่อยขึ้นและฉันสงสัยว่ามันเป็นเพียงเกี่ยวกับชั้นเรียนธรรมดาหรือมันหมายถึงอะไรบางอย่างมากขึ้น?
คำตอบ:
"วัตถุเก่า 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; }
}
ตัวอย่างด้านบนทั้งสองสืบทอดมาจากคลาสพิเศษเพื่อให้มันเพิ่มเติมพฤติกรรมเช่นเดียวกับการใช้คุณลักษณะที่กำหนดเองเพื่อเปลี่ยนพฤติกรรม ... คุณสมบัติเดียวกันที่มีอยู่ในทั้งสองชั้นเรียน แต่หนึ่งไม่ได้เป็นเพียงวัตถุเก่าธรรมดาอีกต่อไป
System.Object
POCO เท่านั้น ถ้ามันสืบทอดมาจากExternalFramework.OrmMapperBase
อะไรทำนองนั้นมันก็ไม่ใช่ POCO อีกต่อไป
คนส่วนใหญ่พูดว่ามัน - วัตถุ CLR แบบเก่าธรรมดา (ตรงข้ามกับ POJO ก่อนหน้า - วัตถุ Java แบบเก่าแบบธรรมดา)
POJO อันหนึ่งออกมาจาก EJB ซึ่งต้องการให้คุณสืบทอดจากคลาสพาเรนต์เฉพาะสำหรับสิ่งต่าง ๆ เช่นค่าวัตถุ (สิ่งที่คุณได้รับจากการสืบค้นใน ORM หรือที่คล้ายกัน) ดังนั้นหากคุณต้องการย้ายจาก EJB (เช่น ฤดูใบไม้ผลิ) คุณถูกยัด
POJO เป็นเพียงคลาสที่ไม่บังคับให้สืบทอดหรือมาร์กอัปแอ็ตทริบิวต์ใด ๆ เพื่อให้พวกเขา "ทำงาน" ในสิ่งที่คุณใช้
POCO เหมือนกันยกเว้นใน. NET
โดยทั่วไปจะใช้รอบ ORM ของ - เก่ากว่า (และบางปัจจุบัน) ต้องการให้คุณได้รับมรดกจากชั้นฐานที่เฉพาะเจาะจงซึ่งผูกคุณกับผลิตภัณฑ์นั้น ใหม่กว่าคน dont (nhibernate เป็นตัวแปรฉันรู้) - คุณเพียงแค่ทำการเรียนลงทะเบียนกับ ORM และคุณจะปิด ง่ายกว่ามาก.
ฉันอาจจะผิดเกี่ยวกับเรื่องนี้ .. แต่อย่างไรก็ตามฉันคิดว่า 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}";
}
}
POCO ย่อมาจาก "Plain Old CLR Object"
หากต้องการเพิ่มคำตอบอื่น ๆ ข้อกำหนด POxx ทั้งหมดดูเหมือนจะเกิดจาก POTS ( บริการโทรศัพท์ธรรมดาธรรมดา )
POX ที่ใช้ในการกำหนด XML แบบธรรมดา (แบบธรรมดา) แทนที่จะเป็นสิ่งที่ซับซ้อนหลายชั้นที่เกี่ยวข้องกับ REST, SOAP ฯลฯ เป็นคำที่มีประโยชน์และน่าขบขัน PO (แทรกภาษาที่เลือก) คำศัพท์ O ค่อนข้างตลกเล็กน้อย
ใน. NET POCO คือ 'วัตถุ CLR เก่าแบบธรรมดา' มันไม่ใช่ 'วัตถุเก่า C # ธรรมดา' ...
ในดินแดน Java โดยทั่วไป "PO" หมายถึง "ธรรมดา" ที่เหลืออาจเป็นเรื่องยากดังนั้นฉันเดาว่าตัวอย่างของคุณ (ในบริบทของ Java) คือ "วัตถุคลาสเก่าแบบธรรมดา"
ตัวอย่างอื่น ๆ
น่าสนใจ สิ่งเดียวที่ฉันรู้ว่าจะทำอย่างไรกับการเขียนโปรแกรมและมี POCO ในนั้นเป็นกรอบ POCO C ++
ในเงื่อนไข WPF MVVM คลาส POCO เป็นคลาสที่ไม่ได้ดำเนินการเหตุการณ์ FireChangeChanged
ในขณะที่ฉันแน่ใจว่า POCO หมายถึงวัตถุระดับเก่าธรรมดาหรือวัตถุวัตถุเก่าแบบธรรมดาถึง 99.9% ของผู้คนที่นี่ POCO ยังเป็น Animator Pro ของ (Autodesk) ที่สร้างขึ้นในภาษาสคริปต์
POCO เป็นวัตถุ CLR แบบเก่าซึ่งแสดงถึงสถานะและพฤติกรรมของแอปพลิเคชันในแง่ของโดเมนปัญหา เป็นชนชั้นที่บริสุทธิ์ปราศจากมรดกไม่มีคุณสมบัติใด ๆ ตัวอย่าง:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}