Definisi 'POCO'

238

Adakah yang bisa mendefinisikan apa arti sebenarnya 'POCO'? Saya lebih sering menemukan istilah, dan saya bertanya-tanya apakah ini hanya tentang kelas biasa atau itu berarti sesuatu yang lebih?

saku
sumber
27
Ini juga lucu bahwa "poco" adalah kata Spanyol yang berarti "kecil, tidak banyak". Jadi, ini cocok dengan konteks ini! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue
6
Itu berarti hal yang persis sama dalam bahasa Italia juga :)
BlackBear
3
Dan dalam bahasa Portugis berarti kesalahan karena dieja: "pouco".
Ismael
3
Kedengarannya seperti PocoHaram bagi saya :)
usefulBee
4
Dalam bahasa Polandia "POCO" adalah pertanyaan "Mengapa menggunakannya"
titol

Jawaban:

197

"Objek C # Biasa Lama"

Hanya kelas normal, tidak ada atribut yang menggambarkan masalah infrastruktur atau tanggung jawab lain yang seharusnya tidak dimiliki oleh objek domain Anda.

EDIT - seperti jawaban lain telah menyatakan, secara teknis "Plain Old CLR Object" tetapi saya, seperti komentar David Arno, lebih suka "Plain Old Class Object" untuk menghindari ikatan dengan bahasa atau teknologi tertentu.

UNTUK MENJELASKAN: Dengan kata lain, mereka tidak berasal dari beberapa kelas dasar khusus, juga tidak mengembalikan tipe khusus untuk properti mereka.

Lihat di bawah untuk contoh masing-masing.

Contoh POCO:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }
}

Contoh sesuatu yang bukan POCO:

public class PersonComponent : System.ComponentModel.Component
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public string Name { get; set; }

    public int Age { get; set; }
}

Contoh di atas keduanya mewarisi dari kelas khusus untuk memberikannya perilaku tambahan serta menggunakan atribut khusus untuk mengubah perilaku ... properti yang sama ada di kedua kelas, tetapi satu bukan hanya objek tua biasa lagi.

David Mohundro
sumber
15
Saya akan melihat POCO sebagai kelas lama sederhana yang tidak mencoba menjadi bagian dari pola yang trendi. Namun saya juga menyukai jawaban Anda.
David Arno
1
Setuju - bukan penggemar nama C #, tapi itulah yang pertama kali saya dengar ketika saya bertanya-tanya tentang pertanyaan :) Kelas kemudian cocok dengan POJO, POVBO POC # O, POC ++ O, PORO, dll.
David Mohundro
14
Ini tidak benar-benar memberikan jawaban yang baik menurut pendapat pribadi saya karena seseorang juga penasaran. Ok, jadi tidak ada atribut yang menggambarkan infrastruktur (apa yang Anda maksud dengan atribut dan infrastruktur ... koneksi DB misalnya? Apa? Contoh tolong). Apa tanggung jawab yang seharusnya tidak dimiliki oleh objek domain Anda? Jadi POCO pada dasarnya adalah objek domain (objek BL)? Jadi benar-benar POCO hanyalah singkatan dari Business Layer Object / Domain Object yang semuanya memiliki arti yang sama. POCO / Business Layer Object / Domain Object == hal yang sama, hanya 3 akronim yang berbeda untuk konsep yang sama, kan?
PositiveGuy
4
jawaban ini sama sekali tidak memberi tahu saya tentang apa itu di dunia nyata ... hanya definisi yang dapat dilihat siapa pun di Wikipedia. Bagaimana dengan beberapa contoh kelas POCO ?? dan mengapa mereka POCO dalam konteks.
PositiveGuy
1
Sebagai contoh, kelas yang Anda tulis hanya mewarisi System.Objectadalah POCO. Jika itu mewarisi dari ExternalFramework.OrmMapperBaseatau sesuatu seperti itu, itu bukan POCO lagi.
David Mohundro
47

Kebanyakan orang mengatakannya - Obyek Old CLR Biasa (sebagai lawan dari POJO sebelumnya - Obyek Old Java Biasa)

POJO yang keluar dari EJB, yang mengharuskan Anda mewarisi dari kelas induk tertentu untuk hal-hal seperti objek nilai (apa yang Anda dapatkan dari kueri dalam ORM atau sejenisnya), jadi jika Anda ingin pindah dari EJB (misalnya ke Spring), kamu dimasukkan.

POJO hanyalah kelas yang tidak memaksa pewarisan atau markup atribut apa pun untuk membuatnya "bekerja" dalam kerangka apa pun yang Anda gunakan.

POCO sama, kecuali di .NET.

Umumnya ini akan digunakan di sekitar ORM - yang lebih tua (dan beberapa yang sekarang) mengharuskan Anda untuk mewarisi dari kelas dasar tertentu, yang mengikat Anda dengan produk itu. Yang lebih baru tidak (nhibernate menjadi varian yang saya tahu) - Anda hanya membuat kelas, mendaftar dengan ORM, dan Anda tidak aktif. Jauh lebih mudah.

Nic Wise
sumber
1
hanya demi kelengkapan, CLR menusuk untuk Common Language Runtime - mesin virtual .net.
filant
4
.Net 3.5 sp1 ORM contoh: kerangka kerja entitas mengharuskan kelas mewarisi dari kelas kerangka kerja tertentu. LINQ to SQL tidak memiliki persyaratan ini. Oleh karena itu LINQ to SQL berfungsi dengan POCOs dan kerangka kerja Entity tidak.
Lucas
23

Saya mungkin salah tentang ini .. tapi bagaimanapun, saya pikir POCO adalah Kelas Tua Biasa objek CLR dan itu berasal dari POJO objek tua Jawa. POCO adalah kelas yang menyimpan data dan tidak memiliki perilaku.

Berikut adalah contoh yang ditulis dalam 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}";
    }
}
Viking jonsson
sumber
4
Ini harus menjadi jawaban yang diterima. Ini memberikan penjelasan aktual (Tidak memiliki perilaku) dan juga memiliki contoh untuk lebih memahami seperti apa POCO.
Héctor Álvarez
Bukankah metode ToString () dalam contoh ini merupakan "perilaku"?
jdoer1997
Saya akan berdebat tentang POCO tidak memiliki perilaku. Ini hanyalah sebuah kelas yang tidak bergantung pada framework / library lain selain .Net. Yaitu kelas File adalah POCO, tetapi DbContext bukan karena tergantung pada Entity Framework.
user3285954
9

POCO adalah singkatan dari "Plain Old CLR Object".

Robert Gamble
sumber
24
ooooook? jadi apa artinya itu dalam konteks atau dunia nyata?
PositiveGuy
27
Dan seperti yang dikatakan guru listrik sekolah menengah saya, "... dan jeruk mencicipi jeruk"
Ian Boyd
7
Benar, tetapi posting ini lebih mirip komentar, daripada jawaban karena tidak sepenuhnya menjawab pertanyaan.
anar khalilov
7

Untuk menambahkan jawaban lain, semua istilah POxx tampaknya berasal dari POTS ( layanan telepon lama biasa) ).

POX, yang digunakan untuk mendefinisikan XML (sederhana tua) sederhana, daripada hal-hal kompleks berlapis-lapis yang terkait dengan REST, SOAP dll, adalah istilah yang berguna, dan agak lucu. PO (masukkan bahasa pilihan) O istilah telah agak memakai lelucon tipis.

David Arno
sumber
6

Dalam .NET POCO adalah 'Objek CLR tua polos'. Ini bukan 'objek C # tua polos' ...

Hardgraf
sumber
5

Di tanah Jawa biasanya "PO" berarti "tua biasa". Sisanya bisa rumit, jadi saya menduga bahwa contoh Anda (dalam konteks Jawa) adalah "objek kelas lama biasa".

beberapa contoh lainnya

  • POJO (objek java tua polos)
  • POJI (antarmuka java lama polos)
basszero
sumber
3

Menarik. Satu-satunya hal yang saya tahu yang harus dilakukan dengan pemrograman dan memiliki POCO di dalamnya adalah kerangka POCO C ++ .

ayaz
sumber
2

Dalam istilah WPF MVVM, kelas POCO adalah kelas yang tidak memadamkan acara PropertyChanged

Null Pointer
sumber
1

Sementara saya yakin POCO berarti Obyek Kelas Lama Biasa atau Obyek Tua Tua C untuk 99.9% orang di sini, POCO juga merupakan Animator Pro (Autodesk) yang dibangun dalam bahasa scripting.

Tuan Mystery Guest
sumber
0

POCO adalah objek CLR tua polos, yang mewakili keadaan dan perilaku aplikasi dalam hal domain masalahnya. ini adalah kelas murni, tanpa warisan, tanpa atribut apa pun. Contoh:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }
}
Mohammad Kamel
sumber