Üç temel adım içeren bir sürü kod yazıyorum.
- Bir yerden veri alın.
- Bu verileri dönüştürün.
- Bu verileri bir yere koyun.
Tipik olarak, kendi tasarım modellerinden esinlenerek üç tip sınıf kullanıyorum.
- Fabrikalar - bazı kaynaklardan nesne oluşturmak için.
- Arabulucular - fabrikayı kullanmak, dönüşümü gerçekleştirmek, sonra komutanı kullanmak.
- Komutanlar - bu verileri başka bir yere koymak için.
Sınıflarım bana oldukça küçük olma eğilimindedir, genellikle tek bir (genel) yöntemdir, örneğin veri alma, veri dönüştürme, iş yapma, veri kaydetme. Bu, sınıfların çoğalmasına yol açar, ancak genel olarak iyi çalışır.
Mücadele ettiğim yerde teste geldiğimde, sonunda sıkı sıkıya bağlı testler yapacağım. Örneğin;
- Fabrika - dosyaları diskten okur.
- Komutan - dosyaları diske yazar.
Birini diğeri olmadan test edemiyorum. Ben de disk okuma / yazma yapmak için ek 'test' kodu yazabilirsiniz, ama sonra kendimi tekrar ediyorum.
.Net'e bakıldığında, File sınıfı farklı bir yaklaşım benimser, fabrikamın ve komutanımın sorumluluklarını birleştirir. Tek bir yerde Oluştur, Sil, Var ve Oku işlevlerine sahiptir.
.Net örneğini takip etmeli ve - özellikle dış kaynaklarla uğraşırken - derslerimi birleştirmeli miyim? Kod hala eşleşti, ancak daha kasıtlı - testlerden ziyade orijinal uygulamada gerçekleşir.
Tek Sorumluluk İlkesini biraz aşırı derecede uyguladığım sorunum burada mı? Okuma ve yazmadan sorumlu ayrı sınıflarım var. Sistem diski gibi belirli bir kaynakla ilgilenmekten sorumlu birleşik bir sınıfım olduğunda.
Looking at .Net, the File class takes a different approach, it combines the responsibilities (of my) factory and commander together. It has functions for Create, Delete, Exists, and Read all in one place.
- "Sorumluluk" u "yapılacak şey" ile sınırlandırdığınızı unutmayın. Sorumluluk daha çok “endişe alanı” na benzer. File sınıfının sorumluluğu dosya işlemlerini gerçekleştirmektir.
File
Kütüphanenizdeki C # 'dan önemli bir nokta , File
sınıfın sadece bir cephe olabileceğini bildiğimiz için , tüm dosya işlemlerini tek bir yere - sınıfa yerleştirmek, ancak dahili olarak kendinize benzer bir okuma / yazma sınıfları kullanmak olabilir. aslında dosya işleme için daha karmaşık mantığı içerir. Böyle bir sınıf (the File
) hala SRP'ye bağlı kalacaktır, çünkü dosya sistemiyle gerçekten çalışma süreci büyük olasılıkla birleştirici bir arayüzle başka bir katmanın arkasına çekilecektir. Öyle olduğunu söylememek, ama olabilir. :)