2012-05-14 13 views
14

Bir kod incelemesinde, bir ortak çalışan kodumu bir Akış olarak parametre olarak geçirecek şekilde değiştirdi. Bunun, nesneyi bertaraf etme sorumluluğunun arayan kişiye açık olmasını sağlamak olduğunu söyledi. Bir anlamda empati kurabilirim. Nesne yaratıcıyı da temizlikten sorumlu tutmayı tercih ederim. Diğer yandan, her iki yöntem de bir using için daha fazla açıklık gerektirmemektedir. Ben de basit yöntem çağrısı tercih ederim.Tek kullanımlık nesneler içeri aktarılmalıdır mı?

ekstra param eklemek için herhangi bir teknik sebebi var mı

public static TextReader Serialize<T>(T obj) where T: new() 
    { 
     if (obj == null) throw new ArgumentNullException("obj"); 
     return Serialize<T>(obj, null); 
    } 

VS

public static void Serialize<T>(T obj, TextWriter outbound) where T : new() 
    { 
     if (obj == null) throw new ArgumentNullException("obj"); 
     Serialize<T>(obj, outbound, null); 
    } 

atın?

+3

.NET Framework'ün kendisinden bir işaret alırsak, örneğin, 'XmlSerializer', akış parametre olarak iletilme eğilimindedir. – mellamokb

+0

http://codereview.stackexchange.com/ için bir soru olabilir – MattDavey

cevap

9

Bu, kesinlikle kod mimarinize bağlıdır.

Ben, şahsen, ikinci yaklaşım gibi (bir kez daha argüman ekler bile) nereye fonksiyonunun tanımıdevletler yakın değil/akışı imha edecek, ancak Caller kalmış.

Aynı işlevde aynı işlevleri çağırdığınızda, her işlev çağrısının akışı kapatacağını ve yeniden açacağını düşünürseniz, bu çok yararlıdır, kaynak tüketen işlem olur.

4

Zaten bir TextWriter açık olabilir. Bu yüzden ikinci versiyonu tercih ederim. Ayrıca, Seri hale getirme yönteminin ne yaptığını de azaltır: Serileştirildi, ancak hiçbir şey açmıyor. Açılış farklı bir konudur.

0

Aşırı yüklenmiş Serialize-T yöntemi akışı oluşturur? Öte yandan

using (var stream = Serialize(a_T))) 
{ 
    // Do something else with the stream? 
} 

, akımın TEMİNİ için arayan için daha iyi olabilir bu durumda geçmek istiyorum: Eğer durum buysa daha basit yöntemi kullanılarak yapar çünkü ben 1. tercih a la seçenek 2.

1

bir proje, programcı (ler) bu (özellikle önemsiz olmayan durumlarda) akışını kapatmak çağıran kod sorumluluğunda olduğunu hatırlamıyorum olabilir ilk yaklaşımda kodu muhafaza geliştikçe . Arayanlar doğru şeyi yapmak için belgelere güvenmek zorunda kalacaklar ve herkes belgeleri okuyor, değil mi? Daha iyi bir yaklaşım yaklaşımı "balances" resources. Sorumlulukların ayrılmasının olduğu yerde daha net hale getirir.

İlgili konular