DTO ve DAO kavramları ve MVC [kapalı]


133

1) Neden kullanırım DTOve DAOve onları ne zaman kullanmalıdır. GUIVeri eklemek, düzenlemek ve silmek için bir Java yazılımı geliştiriyorum . Ama ayırt mücadele ediyorum DTO/DAOve Model, View, Controller(MVC) yapısı? Java aracılığıyla veritabanıyla etkileşim kurarken kullanmak daha iyi olan benzerler mi GUI?

2) Gerçekten merak ettiğim bir şey , tek bir sınıfta viewve sahip olmanın iyi bir uygulama olup olmadığı Controller. Düşünürsek Netbeans, GUIÇerçeve Sınıfı oluşturabilir ve JButtonçerçeveye benzer bileşenler ekleyebilirsiniz , düğmeye çift tıklamak sizi actionListenerverinin kullanıcıya gösterileceği çerçevede görünen yönteme (Denetleyici) götürecektir (Görüntüle) . Yani aynı sınıftalar. Bu tamamen konsepte aykırı mı oluyor yoksa değil mi?

İşte bahsettiğim şey

Bir sınıfta görüntüleme ve denetleyiciye sahip olmak kötü bir uygulama?


@RomanC, Events (eventId, name, date.etc) tutan bir veritabanı tablosuna sahiptir, yani DTO ve MVC aynı mı yoksa farklı mı?
Hoody

Veritabanında DTO değil, veritabanı nesneleriniz var.
Roman C

@RomanC Java sınıflarında üzgünüm, DTO / DAO yapısını mı kullanıyorsunuz yoksa MVC mi kullanmalısınız? fark nedir
Hoody

okumak bu ve bu farkı kontrol
Roma C

İkinci tanımdaki veritabanı hakkında okudunuz mu?
Roman C

Yanıtlar:


269

DTOVeri Aktarım Nesnesinin kısaltmasıdır , bu nedenle uygulamanızın sınıfları ve modülleri arasında verileri aktarmak için kullanılır.

  • DTO yalnızca verileriniz, alıcılarınız, ayarlayıcılarınız ve kurucularınız için özel alanlar içermelidir.
  • DTO bu tür sınıflara iş mantığı yöntemlerinin eklenmesi önerilmez, ancak bazı kullanım yöntemlerinin eklenmesinde sorun yoktur.

DAOData Access Object'in kısaltmasıdır , bu nedenle veri depolama alanınızdaki (bir veritabanı, bir dosya sistemi, her ne olursa olsun) verileri alma, kaydetme ve güncelleme mantığını kapsamalıdır.

DAO ve DTO arayüzlerinin nasıl görüneceğine dair bir örnek:

interface PersonDTO {
    String getName();
    void setName(String name);
    //.....
}

interface PersonDAO {
    PersonDTO findById(long id);
    void save(PersonDTO person);
    //.....
}

Bu MVCdaha geniş bir kalıptır. DTO / DAO, MVC modelindeki modeliniz olacaktır.
Sadece veri alımından sorumlu olan kısmı değil, tüm uygulamayı nasıl organize edeceğinizi anlatır.

İkinci soruya gelince, küçük bir uygulamanız varsa, tamamen sorun değil, ancak MVC modelini takip etmek istiyorsanız , çerçeveniz için iş mantığını ayrı bir sınıfta içeren ayrı bir denetleyiciye sahip olmak daha iyi olacaktır. ve olay işleyicilerinden bu denetleyiciye mesajlar gönderir.
Bu, iş mantığınızı görünümden ayırır.


2
Muhtemelen soruyu yanlış anladım.
Petr

4
"Ayrı kontrolör" ile ne demek istediğinden emin değilim. Okumalarıma göre, MVC'deki kontrolör olabildiğince zayıf olmalı ve iş mantığınız modellerinize dahil edilmelidir.
Paul Carlton

4
Nesne modeli arayüzünde DTO'ların kullanılması korkunç bir uygulamadır. void save (PersonDTO kişi) saf kanserdir.
Ben

3
POJO gibi Class nesnelerimiz varken neden DTO'ya ihtiyacımız var? ikisi de aynı değil mi?
Bhargav

3
@Bhargav DTO'lar, birden çok varlığın (POJO'lar) veya bir kuruluştan sınırlı kaynakların birleşik sonuçlarını döndürmek için kullanılır.
TheCoder
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.