Ai đó có thể định nghĩa chính xác 'POCO' nghĩa là gì không? Tôi đang gặp thuật ngữ này ngày càng thường xuyên hơn và tôi tự hỏi liệu nó chỉ là về các lớp đơn giản hay nó có nghĩa gì hơn?
Ai đó có thể định nghĩa chính xác 'POCO' nghĩa là gì không? Tôi đang gặp thuật ngữ này ngày càng thường xuyên hơn và tôi tự hỏi liệu nó chỉ là về các lớp đơn giản hay nó có nghĩa gì hơn?
Câu trả lời:
"Đối tượng C # cũ đơn giản"
Chỉ là một lớp bình thường, không có thuộc tính nào mô tả mối quan tâm về cơ sở hạ tầng hoặc các trách nhiệm khác mà các đối tượng miền của bạn không nên có.
EDIT - như các câu trả lời khác đã nêu, về mặt kỹ thuật là "Đối tượng CLR cũ đơn giản" nhưng tôi, như nhận xét của David Arno, thích "Đối tượng lớp cũ đơn giản" để tránh quan hệ với các ngôn ngữ hoặc công nghệ cụ thể.
ĐỂ XÁC NHẬN: Nói cách khác, chúng không xuất phát từ một số lớp cơ sở đặc biệt, cũng như không trả về bất kỳ loại đặc biệt nào cho các thuộc tính của chúng.
Xem dưới đây cho một ví dụ về mỗi.
Ví dụ về POCO:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Ví dụ về một cái gì đó không phải là POCO:
public class PersonComponent : System.ComponentModel.Component
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string Name { get; set; }
public int Age { get; set; }
}
Ví dụ trên cả hai đều thừa hưởng từ một lớp đặc biệt để cung cấp cho nó hành vi bổ sung cũng như sử dụng thuộc tính tùy chỉnh để thay đổi hành vi, các thuộc tính giống nhau tồn tại trên cả hai lớp, nhưng một lớp không chỉ là một đối tượng cũ đơn thuần nữa.
System.Object
một POCO. Nếu nó kế thừa từ ExternalFramework.OrmMapperBase
hoặc một cái gì đó tương tự, nó không còn là POCO nữa.
Hầu hết mọi người đã nói điều đó - Đối tượng CLR cũ đơn giản (trái ngược với POJO - Đối tượng Java cũ đơn giản)
POJO đã ra khỏi EJB, yêu cầu bạn thừa kế từ một lớp cha cụ thể cho những thứ như các đối tượng giá trị (những gì bạn nhận được từ một truy vấn trong ORM hoặc tương tự), vì vậy nếu bạn muốn chuyển từ EJB (ví dụ: Mùa xuân), bạn đã bị nhồi.
POJO chỉ là các lớp không bắt buộc kế thừa hoặc bất kỳ đánh dấu thuộc tính nào để làm cho chúng "hoạt động" trong bất kỳ khuôn khổ nào bạn đang sử dụng.
POCO là như nhau, ngoại trừ trong .NET.
Nói chung, nó sẽ được sử dụng xung quanh ORM - cũ hơn (và một số hiện tại) yêu cầu bạn kế thừa từ một lớp cơ sở cụ thể, liên kết bạn với sản phẩm đó. Những cái mới hơn không (nhibernate là biến thể mà tôi biết) - bạn chỉ cần tạo một lớp, đăng ký nó với ORM, và bạn đã tắt. Dễ dàng hơn nhiều.
Tôi có thể sai về điều này .. nhưng dù sao, tôi nghĩ POCO là Đối tượng CLR Lớp đơn giản cũ và nó xuất phát từ Đối tượng Java cũ đơn giản POJO. POCO là một lớp chứa dữ liệu và không có hành vi.
Dưới đây là một ví dụ được viết bằng 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 là viết tắt của "Đối tượng CLR cũ đơn giản".
Để thêm các câu trả lời khác, tất cả các thuật ngữ POxx đều xuất phát từ POTS ( Dịch vụ điện thoại cũ đơn giản ).
POX, được sử dụng để định nghĩa XML đơn giản (cũ đơn giản), thay vì các công cụ đa lớp phức tạp liên quan đến REST, SOAP, v.v., là một thuật ngữ hữu ích và mơ hồ. PO (ngôn ngữ chèn của sự lựa chọn) Các thuật ngữ O khá mặc cho trò đùa mỏng.
Theo thuật ngữ MVVM của WPF, một lớp POCO là một lớp không kích hoạt các sự kiện thuộc tính được thay đổi
Mặc dù tôi chắc chắn POCO có nghĩa là Đối tượng lớp cũ đơn giản hoặc Đối tượng C cũ đơn giản đối với 99,9% người dân ở đây, POCO cũng là Animator Pro (Autodesk) được xây dựng bằng ngôn ngữ kịch bản.
POCO là một đối tượng CLR cũ đơn giản, đại diện cho trạng thái và hành vi của ứng dụng theo miền vấn đề của nó. nó là một lớp thuần túy, không có sự kế thừa, không có thuộc tính nào. Thí dụ:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}