Quindi non so se questo è un buon o cattivo design del codice, quindi ho pensato che sarebbe meglio chiedere.
Creo spesso metodi che eseguono l'elaborazione di dati che coinvolgono classi e spesso eseguo molti controlli nei metodi per assicurarmi di non avere riferimenti null o altri errori prima d'ora.
Per un esempio molto semplice:
// fields and properties
private Entity _someEntity;
public Entity SomeEntity => _someEntity;
public void AssignEntity(Entity entity){
_someEntity = entity;
}
public void SetName(string name)
{
if (_someEntity == null) return; //check to avoid null ref
_someEntity.Name = name;
label.SetText(_someEntity.Name);
}
Così come puoi vedere sto controllando ogni volta null. Ma il metodo non dovrebbe avere questo controllo?
Ad esempio, il codice esterno dovrebbe ripulire i dati in anticipo, quindi i metodi non devono essere convalidati come di seguito:
if(entity != null) // this makes the null checks redundant in the methods
{
Manager.AssignEntity(entity);
Manager.SetName("Test");
}
In breve, i metodi dovrebbero "convalidare i dati" e quindi eseguire la loro elaborazione sui dati o dovrebbero essere garantiti prima di chiamare il metodo e se non riesci a convalidare prima di chiamare il metodo dovrebbe generare un errore (o intercettare errore)?