La domanda potrebbe sembrare un po 'strana, e credo lo sia. Mi è venuta la domanda durante la navigazione attraverso alcuni modelli di progettazione. Sono arrivato al famoso schema di stato / strategia e sono arrivato a questo codice:
public class Account
{
public double Balance { get; private set; }
private IAccountState state;
public Account()
{
state = new ActiveAccountState();
}
public void Deposit(double number)
{
state = state.Deposit(() => Balance += number);
}
public void Withdraw(double number)
{
state = state.Withdraw(() => Balance -= number);
}
public void Freeze()
{
state = state.Freeze();
}
public void Close()
{
state = state.Close();
}
}
È semplicistico e non è già pronto per la produzione, ma non sto cercando di farlo. È un semplice esempio Questo codice mostra effettivamente il problema che sto avendo. Fondamentalmente ho un'interfaccia IAccountState che rappresenta lo stato / strategia. Ora questa può essere considerata una dipendenza e consentendo alla classe Account di SAPERE come produrre ActiveAccountState. Permetto alla classe Account di avere più di 1 responsabilità. Potrei creare un accountStateFactory e farne una dipendenza dalla classe di account. Ciò mi permetterebbe di iniettare facilmente questa dipendenza Factory appena creata con l'uso del costruttore della classe Account. In questo modo, tuttavia, espongo i dettagli di implementazione che sono probabilmente solo interessanti per la classe Account e per nessun altro. Immagino che renderebbe il test delle unità un po 'più semplice.
La mia domanda sarebbe come sapere se qualcosa dovrebbe essere una dipendenza? A volte è semplice (servizi, fabbriche, fornitori, ecc.) Ma ci sono delle volte in cui sono confuso (come in questo esempio di stato / strategia). Grazie in anticipo!