Bir nesnenin oluşturulması dolaylı veya açık bir şekilde dosya mı oluşturmalı?


9

Tek amacı bir formattaki bir dosyada okumak ve başka bir formatta başka bir tane oluşturmak olan bir nesne oluşturuyorum.

Nesne başlatma sırasında çıktı dosyasını örtük olarak oluşturmak veya kullanıcıya bu dosyanın ne zaman oluşturulacağını seçme hakkı veren genel bir yönteme sahip olmak en iyisidir?

Yanıtlar:


12

Bunu destekleyen bir dilde çalışıyorsanız, bir Akış gerçekleştiren bir Kaydetme yöntemi sağlarım. Bu şekilde kullanıcı verileri istediği yere kaydedebilir.

Yazmak sadece bir dosyaya kaydetmekten 20 saniye daha uzun sürüyor, ancak bir programcı tarafından kolayca anlaşılıyor ve çağrı yapan sitede gerçekte ne olduğu çok açık.

Bunu tanımlama şekliniz (girişi okuyan ve başka bir dosyaya çıktı veren bir nesne) aksi halde garip görünüyor. İnşaat sırasında her şeyi yapan bir nesne inşa etmenin amacı nedir?

Bu şekilde söyler misiniz?

var stuff = DoStuff();
new SaveFileWeirdClass(stuff);
return;

SaveFileWeirdClass herhangi bir makul uygulaması için sadece onu oluşturmaktan hiçbir yan etkisi beklenir. Dosya okuma - para cezası. Bir dosya mı oluşturuyorsunuz? Hayır.

Bana göre bu şekilde daha net görünüyor:

var stuff = new StuffReader(); //Better name needed...
string filePath = this.whatever;

using(Stream stream = new FileStream(filePath))
    stuff.Save(stream);

1
Bu iyi. Başka bir benzer seçenek ise, uygulamanın sahip olduğu akış tabanını uygulayan bir nesneyi uygulamak ve bunu diğer akışlarda yaptığınız gibi işlemektir.
Steven Evers

3

Sınıfta yapmak için eğildiyseniz, başlatma sırasında oluşturun. Bu adımın ertelenmesi iki kötü şey yapar: Birincisi, arayan için, çıktı üretmek için kullanmayı düşünmedikçe nesneyi ilk sırada oluşturmamış olan ekstra, açık bir adım ekler. İkincisi, sınıftaki kodun dosyanın açık olup olmadığı konusunda bir karar vermesi gereken en az iki nokta ekler ve bu koşulu ele alır: bir kez çıktı yazmaya gittiğinizde ve bir kez kapattığınızda da imha sırasında. Birincisi , her yazarken bu kontrolü yapmanız gerektiği anlamına gelir , bu da çok fazla yaparsanız boşa gidebilir.

Şahsen ben de yapmam ve çağıranın önceden açılan dosya tanıtıcılarını kurucuya geçirmesini tercih ederim. Sınıf içinde dosya oluşturmak, arayanlara izinleri ayarlama veya bir aygıta yazılıyorsa aygıta özgü başlatma yapma gibi şeyler yapma seçenekleri vermeyi engeller. FooConverterSınıfınızın dosyalar üzerinde çalışan ve oluşturma homurdanması çalışan bir sürümüne sahip olmak istiyorsanız , a FooFileConverter.


2

Açıkça.

Gelecekteki sürümlerde veya nadir görülen mimarilerde kırılabilecek akıllı yan etki kurallarına güvenmediğinizden emin olmak istiyorsunuz. Tabii ki, kullanıcının seçmesi durumunda üzerine yazabileceği varsayılan bir dosyanız olmalıdır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.