2012-05-31 18 views
7

İş nesnelerimizi WCF'ye taşımak için bazı DTO sınıfları oluşturmam gerekiyor.DTO'lar. Özellikler veya alanlar?

Bunlar sadece işlevselliksiz veri torbaları olduğundan, yalnızca alanları kullanamamak için herhangi bir neden var mı, yoksa bunları özellik olarak düzgün bir şekilde göstermek için iyi bir neden var mı?

//fields 
[DataContract] 
class CustomerDTO 
{ 
    [DataMember] public int  Id; 
    [DataMember] public string Name; 
} 

//or properties? 
[DataContract] 
class CustomerDTO 
{ 
    [DataMember] public int Id    { get; set; } 
    [DataMember] public string Name    { get; set; } 
} 

cevap

4

bu hiçbir işlevselliği ile veri sadece çanta olduğundan, sadece alanları

burada kamu alanlarına karşı güçlü argümanlar vardır

kullanamaz herhangi bir neden yoktur. Ancak bunun, sadece DTO'ların içinde mantık (davranış) olmadığı ve normal kapsülleme argümanının bulunmadığı gerçeğinin farkında olun.

Yine de özellikleri tercih ederim ama burada gerçekten gerekli değiller.

+0

Teşekkürler çocuklar. Özellikleri sadece tutarlılık için kullanacaktır. – GazTheDestroyer

0

Alanları doğrudan açıkta bırakmam, çoğu şirket bunu standartlarında yasaklıyor. Etkili bir şekilde kapsüllenmeyi tamamen atıyorsunuz. Daha karmaşık bir şeyin anemik temsilleri olan DTO'lar, mülkleri zaten kapsüllenmeyi neredeyse keserken garip bir durum. Şahsen, mülkleri, sahip oldukları şey olarak kullanırdım. Ayrıca "kirli" işlevsellik vb. Uygulamanıza da izin verir.

+0

Özelliklerle ilgili bir sorun, bir mülkün bir yapı türüne sahip olması durumunda, bu yapının herhangi bir kısmına erişmek, tüm şeyin fazladan bir geçici kopyasını almayı gerektirir. Bir yapı alanını açığa çıkarırken bu türden gereksiz kopyalama işlemleri gerekli değildir. – supercat

2

DataMember özniteliği hem ortak alanlar hem de mülklerle çalışacaktır, bu nedenle ya mümkün olacaktır. Ancak, özelliklerle yapışmasını öneriyorum.

Özellikle, StyleCop kullanıyorsanız, rule SA1401'u kırıyor olacaksınız.

Bu kuralın varlığının nedeni, sizin durumunuzda gerçekten geçerli değildir, ancak sürekli bir bütünleştirme sunucusunda bir yapının parçası olarak StyleCop doğrulamasını çalıştırıyorsanız, yine de bir bakım sorunu olacaktır.

+3

Çözüm bu DTO'ları belirli bir konuma yerleştirirse, yalnızca bu konum için bu kural üzerinde bir stilop geçersiz kılma olabilir. – Oded

+0

Gerçekten de, bu hala çözülmesi gereken bir bakım sorunudur. – devdigital

1

Ya da kullanabilirsiniz. Performansı etkilemediğinden, bazı seri hale getirme çerçevelerine veya ortak alanlarla çalışmayan benzer özelliklere sahip olmanız durumunda, mülklerle gitmekten daha güvenli olursunuz. WCF proxy üretimi kamu özellikleri ve bunların destek özel alanlar, hizmet tarafında kamu alanları kullansalar bile ile istemci tarafında bu DTOs yaratacaktır

Not. Eğer bir şekilde bunu istemezseniz, servis ile müşteri arasında bir DTO kütüphanesi paylaşmanız gerekir.