Czy dobrze rozumiem korzystanie z właściwości i sprawdzenie poprawności danych?

0

Hej! Piszę program konsolowy i mam już mały mętlik w głowie jak poprawnie napisać klasę i sprawdzić w niej poprawność danych. Przykładowo mam klasę Product i dwa propertisy: ProductName typu string i Price typu decimal. Teraz chciałbym sprawdzić czy np. ProductName nie jest null, białym znakiem, czy nie ma za długiej nazwy itp. oraz czy Price nie jest mniejsze od 0 np. I teraz lepiej ustawić prywatnego seta i oddzielna metoda do sprawdzenia poprawności danych, czy prywatne pole i logika w secie? Ja do tej pory rozumiałem to tak, że jeśli logika jest bardziej złożona i jest dużo rzeczy do sprawdzenia jak np. ProductName to lepiej oddzielna metoda do tego, jak mniej do sprawdzenia do prywatne pole i logika w set. Czy dobrze rozumuje? Nie chcę nabrać na samym początku złych nawyków.

3

Ogólnie zapewnianie poprawności obiektu nie jest rzeczą trywialną. Najprościej - bo jak rozumiem jesteś na początku przygody z programowaniem, można użyć do tego celu po prostu konstruktora, a właściwości obiektu niech nie będą modyfikowalne z zewnątrz:

class Product
{
  public string Name { get; private set; }
  public decimal Price { get; private set; }

  public Product(string name, decimal price)
  {
     if (string.IsNullOrWhitespace(name))
      throw new ArgumentException(nameof(name));
     if (price <= 0)
      throw new ArgumentOutOfRangeException(nameof(price))
     
     this.Name = name;
     this.Price = price;
  }
}

W ten sposób zapewniasz, że obiekt będzie zawsze "prawidłowy".
Jeżeli masz bardziej skomplikowaną logikę - wydzielasz metodę w konstruktorze.

Jeżeli obiekt jest faktycznie skomplikowany - możesz użyć np. wzorca Builder (ale to pewnie nie na teraz).

1 użytkowników online, w tym zalogowanych: 0, gości: 1