Witam! Uczę się programowania od niedawna i potrzebuję informacji zwrotnej czy w poprawny sposób modeluje klasy (aplikacje konsolowe). Dla przykładu wstawiam klasę jednego z moich programów (w podobny sposób robię inne). Co mógłbym poprawić? Może kod jest zbyt mało czytelny? Czy dobrze zrobiłem, że propertisy ustawiam oddzielnymi metodami sprawdzającymi poprawność danych? A i jeszcze jedno. Na razie roboczo gdy dane są niepoprawne rzucam po prostu wyjątkiem. W jaki sposób najlepiej, najpoprawniej dać użytkownikowi możliwość poprawy gdyby to on wprowadzał dane? Np. gdy poda złą nazwę sklepu, tworzyć metodę w tej samej klasie która będzie pozwalała skorygować mu błąd i wykorzystać ją w setShopName();? Czy może oddzielna klasa odpowiedzialna za możliwość korekty pomyłek użytkownika? Pytania pewnie banalne ale na początku drogi nie chcę wyrabiać złych nawyków.
using System;
namespace ShopManager
{
public class Shop
{
public string ShopName { get; private set; }
public string LocationId { get; private set; }
public int Id { get; private set; }
public bool IsOpen { get; }
public Shop(string shopName, string locationId, int id)
{
setShopName(shopName);
setLocationId(locationId);
setId(id);
IsOpen = setIsOpen();
}
public void setShopName(string shopName)
{
if (string.IsNullOrWhiteSpace(shopName))
{
throw new ArgumentException($"{shopName} is null or white spaces.");
}
ShopName = shopName;
}
public void setLocationId(string locationId)
{
if (string.IsNullOrWhiteSpace(locationId))
{
throw new ArgumentException(nameof(locationId));
}
else if (locationId.Length != 3)
{
throw new ArgumentException(nameof(locationId));
}
LocationId = locationId;
}
public void setId(int id)
{
if (id <= 0)
{
throw new ArgumentOutOfRangeException($"{id} is lower than 0");
}
Id = id;
}
//method sets the property to true when hour is between 7 and 21.
//the shop is closed on Sundays then return false when day of week is 0 (Sunday)
private bool setIsOpen()
{
if((int)DateTime.Now.DayOfWeek == 0)
{
return false;
}
if (!(DateTime.Now.Hour >= 7 && DateTime.Now.Hour <=21))
{
return false;
}
return true;
}
public override string ToString()
{
string ShopInformation = "";
if (IsOpen == true)
{
ShopInformation = "ShopName: " + "\nLocationId: " + LocationId + "\nId: " + Id + "\nIsOpen: Yes";
}
else
{
ShopInformation = "ShopName: " + "\nLocationId: " + LocationId + "\nId: " + Id + "\nIsOpen: No";
}
return ShopInformation;
}
}
}