Soru Veri Eşleyici Kalıbı


Şimdiye kadar tüm c # veritabanı tabanlı uygulamalarda Aktif kayıtları kullanıyorum. Ama şimdi benim uygulamam ısrar kodumun iş alanımdan ayrılmasını gerektiriyor. Martin Fowler'in veri haritalama modeli ile ilgili birçok yazı okudum, ancak bu örüntü hakkındaki bilgim hala çok sınırlı.

Aşağıdaki örneği kullanalım:

2 tablom varsa - Müşteri ve MüşteriParametreleri. CustomerParameters tablosu, yeni bir Müşteri oluşturmak için varsayılan Müşteri değerlerini içerir.

Daha sonra, tüm Müşterinin kalıcılığını ele almak için bir CustomerMapper sınıfı oluşturmam gerekecek. Müşteri Verilerim ve Müşterilerim sınıfı, müşteri verilerini sürdürmek için bu eşleme sınıfı ile işbirliği yapacaktır.

Aşağıdaki sorularım var:

  1. Ham veriyi Müşteri sınıfımdan belirli iş kurallarını ihlal etmeden eşleştiriciye nasıl aktarırım? DTO en?

  2. Birden çok müşterinin verilerini güncellemek ve yüklemek için Mapper sınıfımda bir SaveAll ve LoadAll yönteminin olması kabul edilebilir mi? Öyleyse, SaveAll durumunda, mapper ne zaman veri güncellemeyi veya eklemeyi bilecek?

  3. Müşteri eşleyici sınıfı, varsayılan değerleri CustomerParameters tablosundan da almaktan mı yoksa bir CustomerParameters mapper'i oluşturmak için daha mı iyi olacak?

Bir O / R mapper aracı gerçekten burada değil. Kullandığım veritabanı Transactional ve kendi Mapper Pattern'i yazmamı gerektiriyor.

Herhangi bir fikir ve yorum büyük takdir edilecektir.


19
2017-10-16 08:16


Menşei


"Transaksiyonel" anlamını genişletebilir misiniz, özellikle MS-SQL veya MySQL gibi geleneksel olarak işlemsel RDBMS ile karşılaştırılabilir mi? Aksi takdirde Petter'in cevabını gayet açık bir şekilde destekleyeyim. - David Schmitt
SQL tabanlı olmayan Btrieve (Indexed Sequential Access Method (ISAM) temelli) kullanıyorum. Tanıdığım tüm O / R Eşleme araçları Btrieve'i desteklemiyor. - MegaByte


Cevaplar:


Shaun sorularına şöyle cevap veririm:

1) Mapper, Müşteri nesnesinin oluşturulmasından sorumludur. Mapper nesnesinde RetrieveById yöntemi (örneğin) gibi bir şey olacaktır. Bir ID'yi kabul edecek ve bir şekilde (Mapper nesnesinin sorumluluğu o değil) geçerli Müşteri nesnesini oluşturacaktır. Aynısı doğrudur. Geçerli bir Müşteri nesnesiyle Mapper.Update yöntemini çağırdığınızda, Mapper nesnesi tüm ilgili verilerin kalıcı olduğundan (uygun olduğunda - db, bellek, dosya vb.) Emin olmaktan sorumludur.

ad 2) Yukarıda belirttiğim gibi geri al / kalıcı olan Mapper nesnesindeki yöntemler. Böyle bir işlevsellik sağlama sorumluluğu. Bu nedenle, LoadAll, SaveAll (büyük olasılıkla bir dizi değer nesnesini geçirerek) geçerli Mapper yöntemleridir.

reklam 3) Evet diyorum. Ancak, Mapper nesnesinin çeşitli yönlerini ayrı sınıflara ayırabilirsiniz (isterseniz / gerekiyorsa): varsayılan değerler, kural doğrulaması, vb.

Umut ediyorum bu yardım eder. Martin Fowler'ın kitabını okumanızı tavsiye ederim. Kurumsal Uygulama Mimarisinin Kalıpları.


11
2018-03-09 18:44





Veri Eşleyici şablonunu kendiniz uygulamaya çalışmadan önce bir O / R eşleme aracına göz atmanızı öneririm. Çok zaman kazandıracak. O / R-mapper popüler bir seçimdir NHibernate.


0
2017-10-16 08:26



Bir O / R mapper aracı benim için gerçekten bir seçenek değildir. Benim kullandığım veritabanı Transactional ve kendi Mapper Pattern'i yazmamı gerektiriyor. - MegaByte


NHibernate'e alternatif olarak iBATIS.NET'i kontrol edebilirsiniz. Aynı zamanda bir O / R aracıdır, ancak NHibernate'den biraz daha kolay kullanıldığını buldum.

http://ibatis.apache.org/


0
2018-03-09 20:25