2010-01-22 15 views
5

Kısa bir süre önce kodumuzda bu örüntüye (?) Rastladım ve hiç de yararlı olmadığını merak ettim. BlazeDS kullanarak bir Spring uygulaması ve Flex front-end var. Bizim DTOs üzerinde arabirimleri kullanan O kadar olduğu gibi, karar verildi:DTO'lar ve arabirimler

Java


public interface ISomeDTO { 
     Integer setId(); 
     void getId(Integer i); 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

Actionscript


public interface ISomeDTO { 
     var id:Integer; 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

Ne DTO üzerinde bir arayüz sizi kazanmak geliyor? Bunlar kesinlikle sıfır mantığı olan hafif nesnelerdir. DTO'lar mantıklı, arayüzler anlamlı, ama birlikte değil.

cevap

3

Neden arabirimlerin ve DTO'ların birlikte çalışmayacağını anlamıyorum.

DTO'lardan etki alanı nesneleri oluşturan bir fabrika/assembler düşünün. Fabrikayı, verilen bir DTO'nun türüne bağlı olarak bir etki alanı nesnesinin belirli uygulamalarını oluşturabilecek şekilde stratejilerle yapılandırabilirsiniz. DTO, burada bir arayüze ideal olarak yazılır. (Bu da ters yönde çalışır).

Her DTO'yu bir arabirimin arkasına koymanız gerektiğini söylemiyorum, ancak etki alanı nesnelerinde olduğu gibi, bunun kesinlikle yararlı olduğu durumlar olacaktır.

+2

Sizin durumunuzda var ve bunun neden faydalı olacağını anlıyorum. Bu bizim başvurumuzda görünür bir nedenden ötürü standarttır (bana en azından). Benim düşüncem, ihtiyaç duyduğunuzda bir arayüz kullanmaktır, sadece değil çünkü. – unscene

3

İşlem tabanlı bir ortamda, veritabanı varlıklarınızı temel db oturumundan ayırmak için DTO'lar kullanılır.

Bu oturumlar normal olarak kullanılamaz ve çoğu varlık temsili yükleme üyesi koleksiyonlarından oluşan proxy'lerden oluşur. Dolayısıyla, bir proxy nesnesindeki bir koleksiyon özelliğine erişecekseniz, proxy, bir veritabanı işlemi mevcut olsun ya da olmasın, bu noktada koleksiyonu bu noktada yükler. Bu nedenle, aktif bir işlem olmadığında, bir kuruluş üyesinin erişimi bir hata oluşturabilir.

Bu, varlıklarınızı bir üyeye erişmeye çalışan görünüme ilettiğinizde gerçekleşir. İşlem işleme normalde hizmet katmanında tanımlandığından, görünüm/denetleyicide aktif işlem yoktur.

  • mesela yoluyla açık Oturumu tutun:

    farklı yaklaşımlar vardır bu sorunu etrafını için açık konuşmak gerekirse olsa Filtre mekanizması (Spring'in OpenSessionInViewFilter), bu zaten bu yardım

umut başlatıldı sizin DAOs gerekli üyeleri ile dolu bir Veri Transferi Nesneler dönelim bir anti-desen

  • olduğunu.

  • +1

    Elbette bu noktaları anlıyorum. Ama neden bir DTO üzerindeki bir arayüz benim için bir anlam ifade etmiyor? DTO'ların kullanımı, bir arayüzün buraya dahil edilmesinden henüz haberdar değildir. – unscene

    +0

    oh sry soruları tamamen yanlış yorumladı. geç ve bütün. neden bir arabirimi kullanacağımı anlamıyorum, bana bir şey ifade etmiyor:/ – fasseg

    +0

    En azından tek ben değilim: P Bu cevap için teşekkür ederim. İyi hazırlanmış. – unscene

    İlgili konular