Sono in difficoltà a causa di questo:Come gestire l'accoppiamento temporale?
Le mie classi hanno alcuni metodi che hanno accoppiamento temporale. Questo è, alcuni metodi MethodA deve essere invocato prima per "inizializzare" i dati che il metodo B deve funzionare correttamente.
solito io faccio l'accoppiamento temporale esplicito facendo passare la dipendenza incriminato per "MethodB"come argomento, come in questo frammento:
private class SomeClass
{
private string field;
private int count;
public SomeClass()
{
MethodA();
MethodB(field);
}
private void MethodA()
{
field = "Something";
}
private void MethodB(string str)
{
count = str.Length;
}
}
Anche se rende le cose esplicita Sento che sto facendo Qualcosa non va. Finisco per avere un metodo che non usa affatto i campi (metodi statici!), Quindi la classe inizia a sembrare meno coesa.
È questo il modo migliore per farlo? (perdendo la coesione passando argomenti)
MODIFICA: per quanto riguarda alcune risposte che suggeriscono di utilizzare il campo come parametro nel costruttore o di utilizzare il modello di generatore per evitare stati non validi: Non riesco a farlo perché nel mio caso sto costruendo un parser. MethodA legge l'input e imposta lo stato in base ad esso (leggendo i caratteri da un file) e quindi viene richiamato MethodB. Devono essere invocati nell'ordine corretto. Questo è il vero problema: uno dovrebbe essere invocato prima dell'altro.
Sei preoccupato per la coesione nei tuoi metodi privati o è un esempio forzato? – neontapir
@neontapir: la coesione più alta non suona come qualcosa di cui dovrebbe essere preoccupato. –
Questo articolo può essere utile: [Accoppiamento temporaneo tra chiamate di metodi] (http://www.yegor256.com/2015/12/08/temporal-coupling-between-method-calls.html) – yegor256