it-swarm-tr.com

DTO, VO, POJO, JavaBeans arasındaki fark?

Bazı benzer sorular gördüm:

Lütfen bana kullanıldıkları bağlamları söyleyebilir misiniz? Veya bunların amacı?

512
jai

JavaBeans

Bir JavaBean, Sun tarafından tanımlandığı şekilde JavaBeans kuralları izleyen bir sınıftır. Vikipedi JavaBeans öğesinin ne olduğuna dair oldukça iyi bir özeti vardır:

JavaBeans, bir oluşturucu aracında görsel olarak manipüle edilebilen Java için yeniden kullanılabilir yazılım bileşenleridir. Pratik olarak, Java programlama dilinde yazılmış ve belirli bir sözleşmeye uyan sınıflardır. Birçok nesneyi tek bir nesneye (fasulye) kaplamak için kullanılırlar, böylece çoklu nesneler yerine tek bir fasulye nesnesi olarak geçirilebilirler. JavaBean, serileştirilebilir, nullary bir kurucuya sahip ve getter ve setter yöntemlerini kullanarak özelliklere erişim sağlayan bir Java Nesnesidir.

Bir JavaBean sınıfı olarak işlev görebilmek için, bir nesne sınıfı, yöntem adlandırma, yapım ve davranışla ilgili bazı kurallara uymalıdır. Bu kurallar, JavaBeans'ı kullanabilecek, yeniden kullanabilecek, değiştirebilecek ve bağlayabilecek araçlara sahip olmayı mümkün kılar.

Gerekli sözleşmeler:

  • Sınıfın ortak bir varsayılan kurucusu olması gerekir. Bu düzenleme ve aktivasyon çerçevelerinde kolay başlatmaya izin verir.
  • Sınıf özelliklerine standart bir adlandırma kuralını izleyerek get, set ve diğer yöntemler (accessor yöntemleri ve mutator yöntemleri) kullanılarak erişilebilir olmalıdır. Bu, pek çok farklı özellik türü için özel düzenleyiciler içeren, çerçevelerin içindeki fasulye durumunun kolay otomatik denetlenmesini ve güncellenmesini sağlar.
  • Sınıf seri hale getirilebilir olmalıdır. Bu, uygulamaların ve çerçevelerin, çekirdeğin durumunu VM ve platformdan bağımsız bir şekilde güvenli bir şekilde kaydetmesini, saklamasını ve geri yüklemesini sağlar.

Bu gereksinimler büyük ölçüde arabirimler uygulamak yerine sözleşmeler olarak ifade edildiğinden, bazı geliştiriciler JavaBeans'ı belirli adlandırma kurallarını izleyen Düz Eski Java Nesneleri olarak görür.

POJO

Düz Eski Bir Java Nesnesi veya POJO, başlangıçta, ağır EJB 2.x'in (özellikle Varlık Fasulyesi, Vatansız Seans Fasulyesi o kadar kötü IMO değildir) aksine, herhangi bir javax.ejb arayüzünü uygulamayan basit, hafif bir Java nesnesini tanımlamak için tanıtılan bir terimdir. Bugün, terim fazladan bir şey içermeyen basit bir nesne için kullanılmaktadır. Yine, Wikipedia POJO tanımında iyi bir iş çıkarır:

POJO, Plain Old Java Object'in kısaltmasıdır. Ad, söz konusu nesnenin özel bir nesne değil, özellikle de bir Enterprise JavaBean olmayan (özellikle EJB 3'ten önce) sıradan bir Java Nesnesi olduğunu vurgulamak için kullanılır. Terim Eylül 2000'de Martin Fowler, Rebecca Parsons ve Josh MacKenzie tarafından icat edildi:

"İnsanların neden sistemlerinde normal nesneler kullanmaya karşı olduklarını merak ettik ve basit nesnelerin süslü bir isme sahip olmadıkları için olduğu sonucuna vardık. Bu yüzden onlara bir tane verdik ve çok güzel bir şekilde yakalandı."

Terim, telefondaki POTS (Plain Old Telephone Service) ve yeni C++ 'da tanımlanan PODS (Plain Old Data Structures) gibi yeni özellikler kullanmayan teknolojiler için daha eski terim kalıplarını sürdürmektedir. ve Perl'deki POD (Eski Eski Belgeler).

Terim, büyük olasılıkla, karmaşık nesne çerçeveleriyle çelişen ortak ve kolay anlaşılır bir terime duyulan ihtiyaç nedeniyle yaygın bir kabul görmüştür. JavaBean, serileştirilebilir, bağımsız değişken yapıcıya sahip olmayan ve alıcı ve ayarlayıcı yöntemlerini kullanarak özelliklere erişim sağlayan bir POJO'dur. Bir Enterprise JavaBean, tek bir sınıf değil, tüm bir bileşen modelidir (yine, EJB 3, Enterprise JavaBeans'ın karmaşıklığını azaltır).

POJO'ları kullanan tasarımlar daha yaygın bir şekilde kullanılmaya başladığında, POJO'lara çerçevelerde kullanılan fonksiyonelliklerin bir kısmını ve aslında hangi fonksiyonellik alanlarının gerekli olduğu konusunda daha fazla seçenek sunan sistemler ortaya çıkmıştır. Hazırda Beklet ve Bahar örneklerdir.

Değer Nesnesi

Bir Değer Nesnesi veya VO, değerleri tutan (dolayısıyla değer nesneleri) Java.lang.Integer gibi bir nesnedir. Daha resmi bir tanım için, genellikle Martin Fowler'in Value Object tanımına bakın:

Kurumsal Uygulama Mimarisi Kalıplarında, Değer Nesnesini, Para veya tarih aralığı nesnesi gibi küçük bir nesne olarak tanımladım. Onların temel özelliği referans anlambiliminden ziyade değer anlamını takip etmeleridir.

Bunları genellikle söyleyebilirsiniz çünkü eşitlik kavramı kimliğe dayanmaz, bunun yerine tüm alanları eşit olduğunda iki değer nesnesi eşittir. Tüm alanların eşit olmasına rağmen, bir alt küme benzersizse tüm alanları karşılaştırmanıza gerek yoktur; örneğin, para birimi nesnelerinin para birimi kodları eşitliği test etmek için yeterlidir.

Genel bir sezgisel, değer nesnelerinin tamamen değişmez olması gerektiğidir. Bir değer nesnesini değiştirmek istiyorsanız, nesneyi yenisiyle değiştirmelisiniz ve değer nesnesinin değerlerini güncellemenize izin verilmemelidir - güncelleştirilebilir değer nesnelerinin takma sorunlarına yol açması gerekir.

Erken J2EE literatürü, farklı bir kavram tanımlamak için değer nesnesi terimini kullandı, buna ne diyeceğim Veri Aktarım Nesnesi . O zamandan beri kullanımlarını değiştirdiler ve bunun yerine Transfer Object terimlerini kullanın.

Değer nesnelerinde daha iyi malzeme bulabilirsiniz wiki ve Dirk Riehle .

Veri Aktarım Nesnesi

Veri Aktarım Nesnesi veya DTO, EJB ile tanıtılan bir (anti) düzendir. EJB'lerde birçok uzak çağrı yapmak yerine, fikir, ağ üzerinden aktarılabilecek bir değer nesnesindeki verileri kapsama almaktı: Veri Aktarım Nesnesi. Wikipedia'da Veri Aktarım Nesnesi iyi bir tanımı var:

Eskiden değer nesneleri veya VO olarak bilinen veri aktarma nesnesi (DTO), yazılım uygulama alt sistemleri arasında veri aktarmak için kullanılan bir tasarım desenidir. DTO'lar genellikle bir veritabanından veri almak için veri erişim nesneleriyle birlikte kullanılır.

Veri aktarma nesneleri ve iş nesneleri veya veri erişim nesneleri arasındaki fark, bir DTO'nun kendi verilerinin (erişimciler ve mutasyonlar) saklanması ve alınması dışında herhangi bir davranışının olmamasıdır.

Geleneksel bir EJB mimarisinde DTO'lar ikili amaçlara hizmet eder: ilk önce, varlık fasulyesinin serileştirilememesi sorunu etrafında çalışır; ikincisi, kontrol tarafından sunum katmanına geri döndürülmeden önce, görünüm tarafından kullanılacak tüm verilerin DTO'lara getirildiği ve karıştırıldığı bir Montaj aşaması tanımlarlar.


Bu yüzden, birçok insan için DTO'lar ve VO'lar aynı şeydir (ancak Fowler, gördüğümüz gibi başka bir şey ifade etmek için VO'ları kullanır). Çoğu zaman, JavaBeans sözleşmelerini takip ederler ve bu nedenle de JavaBeans'tır. Ve hepsi POJO'lar.

781
Pascal Thivent

DTO - VO

DTO - Veri aktarma nesneleri, katmanları ve katmanları arasında veri aktarmak için kullanılan veri kapsayıcılarıdır.

  • Genelde nitelikler içerir. Genel özellikleri, alıcılar ve ayarlayıcılar olmadan da kullanabilirsiniz.
  • Veri aktarım nesneleri herhangi bir iş mantığı içermez.

Analoji:
Kullanıcı adı, şifre ve e-posta kimliği ile basit kayıt formu.

  • Bu form RegistrationServlet dosyasına gönderildiğinde, görünüm katmanından iş katmanına kadar tüm özniteliklere sahip olacaksınız; burada öznitelikleri Java çekirdeklerine ve ardından DAO veya kalıcılık katmanına geçireceksiniz.
  • DTO'lar özelliklerin görünüm katmanından iş katmanına ve son olarak kalıcılık katmanına taşınmasına yardımcı olur.

DTO, esas olarak ağ üzerinden verilerin verimli bir şekilde taşınması için kullanıldı, hatta JVM'den başka bir JVM'ye bile olabilir.

DTO'lar genellikle Java.io.Serializable şeklindedir - JVM'de veri aktarmak için.

VO - Bir Değer Nesnesi [1] [2] sabit bir veri kümesini temsil eder ve bir Java enumuna benzer. Bir Değer Nesnesinin kimliği, nesne kimliğinden ziyade durumlarına dayanır ve değiştirilemez. Gerçek bir dünya örneği Color.RED, Color.BLUE, SEX.FEMALE vs. olabilir.

POJO vs JavaBeans

[1] Bir POJO’nun Java-Beanness’i, özel özelliklerinin tümüne, JavaBeans sözleşmelerine uyan kamu alıcıları ve belirleyiciler aracılığıyla erişilebilmesidir. Örneğin.

    private String foo;
    public String getFoo(){...}
    public void setFoo(String foo){...}; 

[2] JavaBeans seri hale getirilebilir şekilde uygulamalı ve tartışmasız bir kurucuya sahip olmalıdır, oysa POJO’da bu kısıtlamalar yoktur.

57
Srinivas M.V.

Temel olarak,

DTO: "Veri aktarma nesneleri" yazılım mimarisinde ayrı katmanlar arasında hareket edebilir.

VO: "Değer nesneleri" Tamsayılı, Para vb. Gibi bir nesneye sahip.

POJO: Özel bir nesne olmayan düz Eski Java Nesnesi.

Java Beans: seri hale getirilebilen bir Java Class gerektirir, no-arg yapıcısı ve her alan için bir alıcı ve ayarlayıcıya sahip olun

41
Olcay Tarazan

Java Fasulyesi, EJB'ler ile aynı şey değildir.

Java 1.0'daki JavaBeans spesifikasyon , Sun'ın Java nesnelerinin VB'ye benzeyen bir IDE içinde manipüle edilmesine izin verme denemesiydi. "Java Fasulyesi" olarak nitelendirilen nesneler için belirlenmiş kurallar vardı:

  1. Varsayılan yapıcı
  2. Doğru adlandırma kuralını izleyen özel veri üyeleri için alıcılar ve ayarlayıcılar
  3. Serilestirilebilir
  4. Belki de unuttuğum diğerleri.

EJB'ler daha sonra geldi. Dağıtılmış bileşenleri ve işlem modelini birleştirerek, iş parçacıklarını yöneten, havuzlamayı, yaşam döngüsünü yöneten ve hizmet sağlayan bir kapta çalıştırırlar. Java Fasulyesi'nden çok uzaklar.

DTO'lar Java bağlamında ortaya çıktı, çünkü insanlar EJB 1.0 spesifikasyonunun veritabanıyla "konuşkan" olduğunu öğrendiler. Her veri öğesi için bir gidiş dönüş yapmak yerine, insanlar bunları Java Fasulyesi içine toplu olarak paketler ve etrafına gönderirdi.

POJO'lar EJB'lere karşı bir reaksiyondu.

24
duffymo

POJO: Başka bir Java dosyasını (sınıf) genişletmeyen veya uygulamayan bir Java dosyasıdır (sınıf).

Bean: Tüm değişkenlerin özel, metotların genel olduğu ve uygun alıcı ve ayarlayıcıların değişkenlere erişmek için kullanıldığı bir Java dosyasıdır (sınıf).

Normal sınıf: Genel/özel/varsayılan/korumalı değişkenlerden oluşabilen ve başka bir Java dosyasını (sınıf) genişleten veya uygulayamayan bir Java dosyasıdır (sınıf).

4
Suraj Kalokhe

İlk Konuşma Hakkında

Normal Sınıf- normalde Java’da herhangi bir sınıf tanımlaması anlamına gelir, bu farklı türde yöntem özellikleri oluşturduğunuz anlamına gelir etc.
Bean - Bean, bu fasulyeyi kullanarak yalnızca Java sınıfınıza nesne ile erişebileceğiniz belirli bir sınıfın nesnesidir ..

ve ondan sonra geçen POJO hakkında konuştuk

POJO - POJO hiçbir hizmeti olmayan, yalnızca varsayılan bir kurucu ve özel özelliğe sahip olan ve ayarlayıcı ve alıcı yöntemlerine karşılık gelen bir değeri belirlemek için kullanılan özelliktir. . Düz Java Nesnesinin kısa şeklidir.

1
  • Değer Nesnesi : Nesnelerin eşitliklerini nesnelerin değerine göre ölçmeniz gerektiğinde kullanın.
  • Veri Aktarım Nesnesi : Uzak sunucuya birden fazla çağrı yapmaktan kaçınmak için, istemciden sunucuya katman arasında birden çok özellik içeren verileri iletin.
  • Eski Eski Java Nesnesi : Bu özellikler, genel no-arg yapıcısını içeren basit bir sınıf gibidir. JPA varlığı için ilan ettiğimiz gibi.

fark-arası değer-nesne-desen ve veri transfer model

0
Atul Jain