SOLID'i takip ederken, dosyaları okumak ve yazmak iki ayrı sorumluluk mudur?


13

SOLID'i keşfetmeye başladım ve dosyalardan okuma ve dosyalara yazma ile aynı sorumluluğa sahip olup olmadığınızdan emin değilim.

Hedef aynı dosya tipidir; Uygulamamda .pdf'leri okumak ve yazmak istiyorum.

Herhangi bir fark yaratıyorsa uygulama Python'dadır.

Yanıtlar:


24

Okuma ve yazma uygulamasının yüksek oranda bağlı olma olasılığı yüksektir. Biri değişirse, diğeri de değişir. Yüksek uyum, Tek Sorumluluğun güçlü bir göstergesidir ve Tek Sorumluluk İlkesi bize aynı sınıfta bir araya getirilmeleri gerektiğini söyler. Bu operasyonların düşük bir kohezyonu varsa, bunları bölmenin sürdürülebilirliği arttırması ihtimali vardır.

Bununla birlikte, sadece yazmadan veri okuyan veya sadece okumadan yazan tüketiciler varsa, bir arabirim perspektifinden, Arabirim Ayrışma İlkesi tarafından belirtilen şekilde bu işlemleri ayırmanız gerektiğinin bir göstergesidir. Bu, tüketicilerin güvenebilecekleri iki arabirim tanımlaması gerektiği anlamına gelirken, Filesınıf her iki arabirimi de uygulayacaktır.


8

Bir nesneyi tasarlamak için SOLID ilkesini uyguladığınızda, dosya okuma ve yazmayı BİR sorumluluk olarak düşünebilirsiniz - kalıcı verilerle çalışma

Ancak, dosya okuma ve yazma işlemlerini aynı yöntem veya işlev içine koymamalısınız.


5

Diğer cevapların çoğu, sorunuzda önemli bir bilginin eksik olduğunu gözden kaçırmış gibi görünüyor - bize okuyacağınız ve yazacağınız belgelerin ilişkili olup olmadığını ve nasıl olduğunu anlatmadınız!

Uygulamanız "belge nesnesi" gibi bir şeye sahip mi ve bunu önce bir PDF dosyasına yazar ve daha sonra aynı dosyayı tekrar benzer bir belge nesnesine okur mu? Ya da tam tersi, PDF'leri bir belgeye okur, üzerinde bazı değişiklikler yapar ve aynı belgeyi tekrar yeni bir PDF'ye kaydeder mi? O halde okuma ve yazma tek bir sorumluluk olarak görülmelidir. Uygulamanız "PDF düzenleyici" bileşeni veya "PDF düzenleme araç seti" gibi bir şey içeriyorsa veya içeriyorsa durum bu olabilir.

Bununla birlikte, uygulamanızın bir kısmı, örneğin bir raporlama bileşeninde bazı PDF dosyaları oluşturuyorsa ve uygulamanızın alakasız başka bir kısmı farklı PDF'leri (örneğin, bir arama motoru için posta eki değerlendiricisi) ve bu ikinci PDF'lerin ilk kullanım durumu ile hiçbir ortak yanı yoktur, o zaman bu görevler farklı sorumluluklardır.

Özellikle PDF için, bu ikinci kullanım durumu farklı tür uygulamalarda daha sık gördüğüm durumdur. Sadece PDF oluşturmayı destekleyen çok daha fazla kütüphane / bileşen ve PDF okumayı da destekleyen çok daha küçük bir sayı var. PDF dosyalarını oluşturmak için tek bir kütüphane ve PDF'leri okumak için tamamen farklı bir kütüphane kullanacaksanız, PDF okuma ve yazmanın ayrı sorumluluklar olacağı açık olmalıdır.


Bu Steven'ın cevabına benzer, ancak somut bir örnek sağlar.
DavidS

@DavidS: Steven'ın yanıtı çok soyut, ancak OP özellikle PDF dosyaları istediğinden, buna daha somut bir şekilde cevap vermenin mantıklı olduğunu düşünüyorum. Ve PDF için, Steven'ın ilk okuma cümlesine katılmıyorum "okuma ve yazma uygulamasının yüksek derecede uyumlu olma olasılığı yüksek" - deneyimlerime göre, tipik PDF kullanım durumları için tam tersi (ona da bir oylama verdim).
Doc Brown

Somut örnekler mükemmel. Sadece analiz için karşılaştırma yapıyordum. Mükemmel cevap!
DavidS

3

( Robert C. Martin ) ' e göre sorumluluk, belirli bir aktöre hizmet eden bir dizi işlevdir.

Bir aktör, verilen bir sorumluluğun tek değişiklik kaynağı olmalıdır (değişmenin sadece bir nedeni olmalıdır).

Sizin durumunuzda ilk olarak aktörleri ilk adım olarak tanımlamalı, sonra şu soruları sormalısınız:. Sadece dosyaları okuyarak ve diğerlerini yazarak ilgilenen aktörler var mı?

Bu durumda, dosyaları okumak ve yazmak iki ayrı sorumluluktur. Birden fazla değişiklik kaynağı olacağı için (birçok aktör okuma mantığını ve yazmak için aynı şeyi değiştirmeyi isteyebilir).

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.