Penggunaannya sederhana dalam kedua kasus, tetapi apa artinya mengaktifkan input parameter ke Parser1, dibandingkan dengan yang lain?
Ini adalah perubahan desain mendasar. Dan desain harus menyampaikan maksud dan makna. Apakah Anda perlu memiliki objek terpisah untuk setiap string yang ingin Anda parsing? Dengan kata lain, mengapa kita membutuhkan instance parser dengan stringX dan contoh lain dengan stringY? Ada apa dengan parse (ing) dan string yang diberikan bahwa keduanya harus hidup dan mati bersama? Dengan asumsi bahwa "implementasi [parsing] yang mendasarinya" (seperti yang dikatakan Robert Harvey) tidak berubah, tampaknya tidak ada gunanya. Dan itupun IMHO dipertanyakan.
Bagaimana konsep perubahan kelas ketika meneruskan data ke konstruktor alih-alih parameter metode?
Parameter konstruktor memberi tahu saya hal-hal ini diperlukan untuk suatu objek. Status yang tepat tidak dijamin tanpa mereka. Juga, saya tahu bagaimana / mengapa satu parser secara fundamental berbeda dari yang lain.
Parameter konstruktor membuat saya tidak perlu tahu terlalu banyak tentang cara menggunakan kelas. Jika sebaliknya saya seharusnya menetapkan properti tertentu - bagaimana saya tahu itu? Segelas cacing terbuka. Sifat apa? Dalam urutan apa? Sebelum saya menggunakan metode apa? dan seterusnya.
Pertanyaan lain muncul ketika saya menyadari bahwa antarmuka akan sangat tidak berarti dalam implementasi kedua:
Antarmuka, seperti dalam API, adalah metode dan properti yang diekspos ke kode klien. Jangan terlibat secara public interface { ... }
eksklusif. Jadi arti dari antarmuka adalah dilema parameter baik-atau konstruktor vs metode, TIDAK public interface Iparser
vspublic sealed class Parser
The sealed
kelas aneh. Jika saya berpikir tentang implementasi parser yang berbeda - Anda memang menyebutkan "Iparser" - maka warisan adalah pikiran pertama saya. Itu hanya perpanjangan konseptual yang alami dalam pemikiran saya. IE semua ParserX
s pada dasarnya Parser
s. Bagaimana cara mengatakannya? ... German Shepard adalah seekor anjing (warisan), tetapi saya dapat melatih burung beo saya untuk menggonggong (bertindak seperti anjing - "antarmuka"); tetapi Polly bukan seekor anjing, hanya berpura-pura, telah belajar sebagian dari dogness. Kelas, abstrak atau lainnya, berfungsi dengan baik sebagai antarmuka .