SORU
29 NİSAN 2009, ÇARŞAMBA


Veri Eşleyici, Tablo Veri Ağ Geçidi (Gateway), Veri Erişim Nesnesi (DAO) ve Depo desenleri arasındaki fark nedir?

Tasarım desen benim becerileri üzerinde fırça çalışıyorum, ve bu modeller arasındaki farklar nelerdir merak ediyorum? Hepsi çağıran kodun temel kalıcılık katmanı hiçbir bilgiye sahip, bu yüzden aynı şey - belirli bir varlık için veritabanı mantığı saklanması gibi görünüyor. Benim kısa bir araştırmadan hepsi genelde standart CRUD yöntemleri uygulamak ve soyut uzak veritabanına özgü ayrıntılar.

Adlandırma kuralları (CustomerDAO vs CustomerGateway örneğin CustomerMapper vs vs CustomerRepository) dışında, herhangi bir fark, nedir? Eğer bir fark varsa, o zaman başka birini seçti ki?

Geçmişte aşağıdakine benzer bir kod (basitleştirilmiş, doğal olarak normalde ortak özelliklerini kullanmak olmaz) yazardım:

public class Customer
{
    public long ID;
    public string FirstName;
    public string LastName;
    public string CompanyName;
}

public interface ICustomerGateway
{
    IList<Customer> GetAll();
    Customer GetCustomerByID(long id);
    bool AddNewCustomer(Customer customer);
    bool UpdateCustomer(Customer customer);
    bool DeleteCustomer(long id);
}

ve tüm yöntemleri için belirli bir veritabanı mantığı uygulayan CustomerGateway bir sınıf var. Bazen öyle diyebilirim bir arayüz kullanımı ve CustomerGateway ilgili tüm yöntemleri statik yapmazdım (bu onu daha az test edilebilir yapar, biliyorum, biliyorum):

Customer cust = CustomerGateway.GetCustomerByID(42);

Bu Veri Eşleyici ve Depo desenler; DAO desen, bence Geçidi? aynı şey olan) için de aynı prensip gibi görünüyor ayrıca görünüyor veritabanına özel ağ geçitleri teşvik etmek.

Bir şey mi kaçırdım? Biraz garip 3-4 aynı şeyi yapmanın farklı yolları var gibi görünüyor.

CEVAP
2 Mayıs 2009, CUMARTESİ


Örnek açısından; DataMapper, DAO, DataTableGateway ve Depo var, hepsi benzer bir amaç (zaman kullanıyorum, bekliyorum geri dönmek bir Müşteri nesnesi), ama farklı bir niyet/anlam ve sonuç uygulama.

BirDepo< . em ^"daha ayrıntılı sorgulama yeteneği dışında bir koleksiyon gibi davranır"Ve bir olarak kabul edilebilir [Evans, Domain Driven Design]< . em ^"hafıza cephe nesneleri"(Repository discussion)

BirDataMapper< . em ^birbirlerine ve eşleyici bağımsız tutarken "nesneleri ve veritabanı arasında veri kendisi" taşır(Fowler, PoEAA, Mapper)

BirTableDataGateway"bir veritabanı tablosu için bir ağ Geçidi (harici bir sistem veya kaynağa erişimi içeren nesne). Bir örnek tablodaki tüm satırları işler"(Fowler, PoEAA, TableDataGateway)

BirDAO< . em ^"veri kaynağı istemci ayıran veri erişim mekanizmalarının genel bir müşteri için özel bir veri kaynak erişim API uyarlar" . arabirimi arabirimi izin< . em ^"veri erişim mekanizmaları verileri kullanan kod bağımsız olarak değiştirmek için"(Sun Blueprints)

Depo çok genel, veritabanı etkileşimi kavramı açığa görünüyor. Bir DAO Arayüzü farklı temel veritabanı uygulamalarında kullanılmasını sağlar. Bir TableDataGateway özellikle tek bir masa etrafında ince bir sarıcı. Bir DataMapper bir aracı olarak veritabanı gösterimi bağımsız olarak gelişmeye Model nesne (zamanla) bileşenini kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012