Her iki durumda da kullanım kolaydır, ancak Parser1'e parametre girişini diğerine kıyasla etkinleştirmek ne anlama gelir?
Bu temel bir tasarım değişimi. Ve tasarım niyet ve anlam taşımalıdır. Ayrıştırmak istediğiniz her dize için ayrı nesneleriniz olması gerekiyor mu? Başka bir deyişle, neden stringX ile ayrıştırıcı örneğine ve stringY ile başka bir örneğe ihtiyacımız var? Ayrıştırma (ing) ve ikisinin birlikte yaşaması ve ölmesi gereken verilen dize nedir? "Robert Harvey'in dediği gibi" temeldeki [ayrıştırma] uygulamasının değişmediğini varsayarsak, hiçbir anlamı yoktur. Ve o zaman bile tartışmalı IMHO.
Verileri yapıcıya yöntem parametreleri yerine geçirirken sınıf kavramı nasıl değişir?
Yapıcı parametreleri bana bu nesnelerin bir şey için gerekli olduğunu söylüyor. Bunlar olmadan uygun durum garanti edilmez. Ayrıca, bir ayrıştırıcının diğerinden temel olarak nasıl / neden farklı olduğunu biliyorum.
Yapıcı parametreleri, sınıfın nasıl kullanılacağı hakkında çok fazla bilgi sahibi olmamı engelliyor. Bunun yerine belirli özellikleri ayarlamam gerekiyorsa - bunu nasıl bilebilirim? Bir kutu solucan açılır. Hangi özellikler? Hangi sırayla? Hangi yöntemleri kullanmadan önce? ve bunun gibi.
Başka bir soru, ikinci uygulamada bir arayüzün oldukça anlamsız olacağını fark ettiğimde ortaya çıkıyor:
API'da olduğu gibi bir arayüz, istemci koduna maruz kalan yöntemler ve özelliklerdir. public interface { ... }
Sadece sarılmayın . Yani arayüzün anlamı ya-veya yapıcı vs yöntem parametresi ikilemindedir, NOT public interface Iparser
vspublic sealed class Parser
sealed
Sınıf garip. Farklı ayrıştırıcı uygulamaları düşünürsem - "Iparser" dan bahsettiniz - o zaman miras benim ilk düşüncemdir. Düşüncemde sadece kavramsal bir uzantı. IE tüm ParserX
s temelde Parser
s. Başka nasıl söylenir? ... Alman Shepard bir köpek (kalıtım), ama papağanımı havlamaya eğitebilirim (köpek gibi davran - "arayüz"); ama Polly, sadece bir köpekbalığı alt kümesi öğrenmiş gibi davranan bir köpek değildir. Sınıflar, soyut veya başka türlü, arayüzler kadar mükemmel bir şekilde hizmet eder .