O uso é simples nos dois casos, mas o que significa ativar a entrada de parâmetro no Parser1, em comparação com o outro?
É uma mudança fundamental no design. E o design deve transmitir intenção e significado. Você precisa ter objetos separados para cada string que deseja analisar? Em outras palavras, por que precisamos de uma instância do analisador com stringX e outra instância com stringY? O que há com a análise e a sequência especificada de que os dois devem viver e morrer juntos? Assumindo que a "implementação [de análise] subjacente" (como diz Robert Harvey) não muda, parece não haver sentido. E mesmo assim é questionável IMHO.
Como o conceito de uma classe muda ao passar dados para o construtor em vez de parâmetros de método?
Os parâmetros do construtor dizem que essas coisas são necessárias para um objeto. O estado adequado não é garantido sem eles. Além disso, sei como / por que um analisador é fundamentalmente diferente de outro.
Os parâmetros do construtor me impedem de saber muito sobre como usar a classe. Se, em vez disso, devo definir determinadas propriedades - como eu sei disso? Uma lata inteira de vermes se abre. Quais propriedades? Em que ordem? Antes de usar quais métodos? e assim por diante.
Outra pergunta surge quando percebo que uma interface não teria sentido na segunda implementação:
Uma interface, como na API, são os métodos e propriedades expostos ao código do cliente. Não se embrulhe public interface { ... }
exclusivamente. Portanto, o significado da interface está no dilema de parâmetro entre o construtor e o método vs, NOT public interface Iparser
vspublic sealed class Parser
A sealed
turma é estranha. Se eu estou pensando em diferentes implementações de analisador - você mencionou "Iparser" -, herança é meu primeiro pensamento. É apenas uma extensão conceitual natural do meu pensamento. Ou seja, todos os ParserX
s são fundamentalmente Parser
s. Como mais dizer isso? ... Um Shepard alemão é um cachorro (herança), mas eu posso treinar meu papagaio para latir (agir como um cachorro - "interface"); mas Polly não é um cachorro, apenas fingindo, tendo aprendido um subconjunto de dogness. Classes, abstratas ou não, servem perfeitamente bem como interfaces .