Więc nie wiem, czy to dobry, czy zły projekt kodu, więc pomyślałem, że lepiej zapytam.
Często tworzę metody, które przetwarzają dane z wykorzystaniem klas i często przeprowadzam wiele kontroli metod, aby upewnić się, że nie otrzymam pustych referencji lub innych błędów.
Dla bardzo podstawowego przykładu:
// 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);
}
Jak widać, za każdym razem sprawdzam, czy nie ma wartości null. Ale czy metoda nie powinna mieć tej kontroli?
Na przykład kod zewnętrzny powinien wyczyścić dane przed użyciem, aby metody nie musiały sprawdzać poprawności, jak poniżej:
if(entity != null) // this makes the null checks redundant in the methods
{
Manager.AssignEntity(entity);
Manager.SetName("Test");
}
Podsumowując, czy metody powinny „sprawdzać poprawność danych”, a następnie przetwarzać je na danych, czy też powinno to być zagwarantowane przed wywołaniem metody, a jeśli nie sprawdzisz poprawności przed wywołaniem metody, powinna zgłosić błąd (lub złapać błąd)?