'POCO' tanımı


238

Birisi 'POCO'nun tam olarak ne anlama geldiğini tanımlayabilir mi? Terimle daha sık karşılaşıyorum ve bunun sadece düz sınıflarla mı ilgili olduğunu mu yoksa daha fazla şey ifade ettiğini mi merak ediyorum?


27
"Poco" nun "küçük, fazla değil" anlamına gelen İspanyolca bir kelime olması da komik. Yani, bu bağlama iyi uyuyor! en.wiktionary.org/wiki/poco
EnocNRoll - AnandaGopal Pardue

6
İtalyancada da aynı şey demek :)
Blackbear

3
Ve Portekizce'de hata olduğu için bir hata anlamına gelir: "pouco".
Ismael

3
Bana PocoHaram gibi geliyor :)
yararlı

4
Lehçe "POCO" soru "Neden kullanıyorsunuz"
titol

Yanıtlar:


197

"Düz Eski C # Nesnesi"

Yalnızca normal bir sınıftır; etki alanı nesnelerinizin sahip olmaması gereken altyapı kaygılarını veya diğer sorumlulukları açıklayan hiçbir özellik yoktur.

DÜZENLEME - diğer cevapların belirttiği gibi, teknik olarak "Düz Eski CLR Nesnesi" ama David Arno yorumları gibi ben, belirli diller veya teknolojilerle bağlarını önlemek için "Düz Eski Sınıf Nesnesi" tercih ederim.

AÇIKLAMAYA: Başka bir deyişle, bazı özel temel sınıflardan türetmezler ve özellikleri için herhangi bir özel tür döndürmezler.

Her birinin bir örneği için aşağıya bakın.

Bir POCO örneği:

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

    public int Age { get; set; }
}

POCO olmayan bir şey örneği:

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

    public int Age { get; set; }
}

Yukarıdaki örnek, ek bir davranış sağlamak için özel bir sınıftan her ikisini de devralır ve davranışı değiştirmek için özel bir öznitelik kullanır… her iki sınıfta da aynı özellikler vardır, ancak artık sadece düz eski bir nesne değildir .


15
Bir POCO'yu modaya uygun desen setinin bir parçası olmaya çalışmayan sade eski bir sınıf olarak görürdüm. Ancak cevabınızı da seviyorum.
David Arno

1
Kabul etti - C # adının bir hayranı değil, ama soru hakkında merak ettiğimde ilk duyduğum şey :) Sınıf daha sonra POJO, POVBO POC # O, POC ++ O, PORO, vb.'ye uyar
David Mohundro

14
Bu da benim kişisel görüşüme göre iyi bir cevap vermiyor, çünkü meraklı biri de. Tamam, bu yüzden altyapıyı tanımlayan hiçbir özellik yok (özellikler ve altyapı ile ne demek istiyorsun ... örneğin bir DB bağlantısı? Ne? Örnek lütfen). Etki alanı nesnelerinizin hangi sorumlulukları olmamalıdır? POCO temel olarak bir etki alanı nesnesidir (BL nesnesi)? Yani gerçekten POCO, hepsi aynı lanet şey anlamına gelen bir İş Katmanı Nesnesi / Etki Alanı Nesnesi için başka bir kısaltmadır. POCO / Business Layer Object / Domain Object == aynı lanet şey, aynı konsept için sadece 3 farklı kısaltma doğru mu?
PositiveGuy

4
bu cevap bana gerçek dünyada ne olduğu hakkında hiçbir şey söylemiyor ... sadece Wikipedia'da herkesin arayabileceği bir tanım. Bazı örnek POCO sınıflarına ne dersiniz ?? ve neden bağlamda POCO olduklarını.
PositiveGuy

1
Örnek olarak, sadece miras aldığınızı yazdığınız bir sınıf System.Objectbir POCO'dur. Eğer miras ExternalFramework.OrmMapperBaseya da buna benzer bir şey varsa, artık bir POCO değildir.
David Mohundro

47

Çoğu insan bunu söyledi - Düz Eski CLR Nesnesi (önceki POJO'nun aksine - Düz Eski Java Nesnesi)

POJO, EJB'den çıktı, bu da değer nesneleri (ORM veya benzeri bir sorgudan geri döndüğünüz) gibi belirli bir üst sınıftan miras almanızı gerektirdiğinden, EJB'den (ör. Bahar), doldurulmuştun.

POJO'lar, sadece kullandığınız çerçevede "çalışmasını" sağlamak için miras veya herhangi bir nitelik işaretini zorlamayan sınıflardır.

POCO'lar .NET dışında aynıdır.

Genellikle ORM'lerin çevresinde kullanılır - daha eski (ve bazı mevcut olanlar), sizi o ürünle bağlayan belirli bir temel sınıftan miras almanızı gerektirir. Daha yeni olanlar (nhibernate bildiğim varyant) - sadece bir sınıf yaparsınız, ORM'ye kayıt olursunuz ve kapalısınız. Daha kolay.


1
tamlık uğruna, CLR Ortak Dil Çalışma Zamanı - .net sanal makinesi için bıçaklar.
hayırsever

4
Net 3.5 sp1 ORM örneği: Varlık çerçevesi, sınıfların belirli bir çerçeve sınıfından miras almasını gerektirir. LINQ to SQL bu gereksinime sahip değildir. Bu nedenle LINQ to SQL, POCO'lar ile çalışır ve Entity framework çalışmaz.
Lucas

23

Bu konuda yanlış olabilir .. ama neyse, sanırım POCO Düz Eski Sınıf CLR Nesne ve POJO düz eski Java Nesnesi geliyor. POCO, verileri tutan ve davranışları olmayan bir sınıftır.

İşte C # ile yazılmış bir örnek:

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
Bu kabul edilen cevap olmalı. Gerçek bir açıklama sağlar (Davranışı yoktur) ve ayrıca bir POCO'nun neye benzediğini daha iyi anlamak için bir örneğe sahiptir.
Héctor Álvarez

Bu örnekte ToString () yöntemi bir "davranış" değil mi?
jdoer1997

Bir POCO'nun davranışları olmadığını tartışırım. Basitçe .Net'ten başka bir çerçeveye / kütüphaneye bağlı olmayan bir sınıftır. Yani File sınıfı POCO'dur, ancak DbContext Entity Framework'e bağlı değildir.
user3285954

9

POCO, "Plain Old CLR Object" anlamına gelir.


24
ooooook? peki bu bağlamda veya gerçek dünyada ne anlama geliyor?
PositiveGuy

27
Ve lise elektrik öğretmenimin dediği gibi "... ve portakal orangey tadı"
Ian Boyd

7
Doğru, ancak bu yazı soruyu tamamen cevaplamadığı için bir cevaptan ziyade bir yorum gibi görünüyor.
anar khalilov

7

Diğer cevapları eklemek için POxx terimlerinin tümü POTS'den ( Düz eski telefon hizmetleri ) kaynaklanıyor gibi görünmektedir .

REST, SOAP vb. İle ilişkili karmaşık çok katmanlı şeyler yerine basit (düz eski) XML tanımlamak için kullanılan POX, yararlı ve belirsiz bir terimdi. PO (tercih edilen dili girin) O terimleri şakayı daha ince giymiştir.


6

.NET'te bir POCO 'Düz eski CLR Nesnesidir'. 'Düz eski C # nesnesi' değil ...


5

Java ülkesinde genellikle "PO" "düz eski" anlamına gelir. Gerisi zor olabilir, bu yüzden örnek (Java bağlamında) "düz eski sınıf nesnesi" olduğunu tahmin ediyorum.

diğer bazı örnekler

  • POJO (sade eski java nesnesi)
  • POJI (sade eski java arayüzü)


2

WPF MVVM terimleriyle, bir POCO sınıfı, PropertyChanged olaylarını Ateşlemeyen sınıftır


1

POCO'nun, buradaki insanların% 99,9'u için Düz Eski Sınıf Nesnesi veya Düz Eski C Nesnesi anlamına geldiğinden emin olmakla birlikte, POCO aynı zamanda Animator Pro'nun (Autodesk) komut dosyası dilinde oluşturulmuştur.


0

POCO, sorunun etki alanı açısından uygulamanın durumunu ve davranışını temsil eden düz eski bir CLR nesnesidir. mirassız, niteliksiz saf bir sınıftır. Misal:

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

    public string Name { get; set; }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.