Witam,
Nie mam zbyt wiele poważnego doświadczenia w programowaniu dlatego chciałem zapytać kolegów/koleżanek bardziej doświadczonych żeby na przyszłość lepiej programować i nie wdrażać złych nawyków w swoim życiu.
Wracając do tematu. Napisałem pewien kod w WPF, który ma za zadanie sprawdzić textbox login, wywołać animację (to raczej nie istotne w tym temacie) i następnie zareagować na wpisanie hasła. Mniej więcej wygląda to jak w google, czyli najpierw wpisujemy login i klikamy w celu sprawdzenia poprawności wpisania danych i dopiero wtedy wyświetla nam się textbox do wpisania hasła.
Kod działa, ale nie wiem czy jest on napisany poprawnie (chodzi tu o konwencje, sposób napisania, użycia poprawnych metod). Użyłem zmiennej static i gdzieś słyszałem, że lepiej jest ich nie używać i np. użyć do tego konstruktora. Wklejam kod i proszę o jakiś feedback, a szczególnie wyjaśnienie na temat 'statica', czy go używać kiedy się chce, czy bardziej ograniczać.
Klasa ConnectionLogin
class ConnectionLogin : Connection
{
private static string _login = "null";
public virtual string loginName
{
get { return _login; }
}
public async Task TryLogginAsync(string textFromTextBox)
{
if(CheckForConnectionInternet()) // Funckja statyczna spr internet z klasy Connection.
{
if(!textFromTextBox.Contains('.') && textFromTextBox != "admin")
{
MessageBox.Show("Zły login.","Błąd uwierzytelniania");
return;
}
_login = textFromTextBox;
await Task.Factory.StartNew(() =>
{
AnimeLogin anime = new AnimeLogin();
anime.RunningAnime();
});
}
}
}
oraz Klasa po niej dziedzicząca ConnectionPassword:
class ConnectionPassword : ConnectionLogin, IConnectSQL
{
public string Query { get; set; }
public override string loginName => base.loginName;
public void Login(string textFromTextBox)
{
if (CheckForConnectionInternet())
{
Query = "SELECT * FROM Users WHERE Login='" + loginName + "' AND Password='" + textFromTextBox + "';";
const string connectInfo = "String z danymi.";
MySqlConnection ConnectSQL = new MySqlConnection(connectInfo);
try
{
ConnectSQL.Open();
MySqlCommand cmd = new MySqlCommand(Query, ConnectSQL);
MySqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
if (dt.Rows.Count < 1)
{
MessageBox.Show("Nie znaleziono takiego użytkownika.", "Błąd uwierzytelniania konta.");
return;
}
//Dalszy kod, który uruchomi nowe okno aplikacji.
}
catch
{
MessageBox.Show("Błąd połączenia z bazą danych. Prawdopodobnie przekroczono limit czasu.", "Błąd połączenia.");
}
}
}
}