Aplikowałem na juniora desktop .net, w cv zaznaczyłem ze ms sql jest moja najsłabszą strona, dostałem zadanie o treści jak niżej do sprawdzenia progu wejścia na stanowisko juniora, niestety nie otrzymałem odpowiedzi stąd domyślam się ze mój próg wejścia jest zbyt niski na juniora.
Prośba o sprawdzenie rozwiązania i o wypunktowanie obszarów w których widzicie ze są dziury do załatania.
Treść zadania:
Proszę utworzyć aplikację z interfejsem użytkownika używając WPF i języka C#.
Celem aplikacji będzie połączenie się z bazą danych MS SQL Server (może być Express) używając
loginu oraz hasła i odczytanie z tabel systemowych nazw kolumn należących do tabel znajdujących się
w bazie DevData.
Należy pobrać informacje tylko o kolumnach typu int.
Definicja bazy danych wygląda następująco:
CREATE DATABASE [DevData];
GO
CREATE TABLE [DevData].dbo.Table_A (Col_A1 int, Col_A2 varchar(10, Col_A3 date);
CREATE TABLE [DevData].dbo.Table_B (Col_B1 int, Col_B2 nchar(10, Col_B3 int);
CREATE TABLE [DevData].dbo.Table_C (Col_C1 varchar (10, Col_C2 timestamp, Col_C3
int, Col_C4 char(10) );
Pobrane dane dotyczące powyższych obiektów pokazać w DataGridzie lub podobnej kontrolce na
oknie głównym aplikacji.
Na oknie głównym aplikacji powinny się też znaleźć pola loginu i hasła do połączenia z bazą danych
oraz przycisk Testuj połączenie. Po jego naciśnięciu ma się wyświetlić informacja czy połączenie się
udało.
W przeciwnym przypadku należy wyświetlić stosowną informację o błędzie.
Poniżej, w przypadku udanego połączenia, ma się uaktywnić przycisk Załaduj dane, który wywoła
operację pobrania danych z bazy i umieszczenia w obiekcie DataGrida.
moje rozwiązanie:
Rozwiązanie zadania na moim GitHub
Z tego co się sam domyślam, ale nie mam pewności, odnośnie błędów w moim rozwiązaniu zadania to:
- najprawdopodobniej źle zrozumiałem skąd i gdzie mam się logować, najprawdopodobniej trzeba było dodać tabelkę z użytkownikami i na jej podstawie weryfikować poprawność logowania a w connectionsting ustawić 'Trusted_Connection=True',
- najprawdopodobniej chodziło o zastosowanie EF albo innego ORM'a?
- mało testów i małe pokrycie testami, pewnie słaba jakość testów tych jakie mam? No i pewnie widać ze TDD nie mam zaszczepionego, chyba widać ze najpierw pisze kod potem dopisuje testy?
- opakowanie kontrolki PasswordBox aby zbindować jej właściwość 'Password' to jedno jawnie zerżnięte z netu, to chyba widać i tu wyłazi mój brak znajomości dependencypropoerties, behaviors i attached properties, tu trzeba było korzystać z 'SecurePassword' i zaangażować 'NetworkCredential' (nigdy tego nie używałem więcej rzeczy już nie chciałem zrzynać rozwiązań z netu)
- 'RelayCommand' zamiast oddelegowania do oddzielnego folderu Poleceń?
- nie jestem pewien czy podejście do wyjątków jest ok, bo raz korzystam z tego co przyniósł wyjątek i wyświetlam na oknie (ViewModel od wyświetlania danych z bazy), a drugi raz tylko pośrednio informuje co się stało poprzez zaszyty komunikat w maszynie stanów (ViewModel strony logowania).
- najprawdopodobniej trzeba było pobrać jednym zapytaniem wszystkie dane zamiast iterować po tabelach sekwencyjnie w repozytorium?
- polskie nazwy? określiłem w cv znajomość angielskiego tylko na poziomie czytania dokumentacji, wiec nie naciągałem faktów
powiązane wątki na forum które wygenerowałem próbując rozwiązać to zadanie:
- https://4programmers.net/Forum/C_i_.NET/364702-jak_odroznic_zly_login_od_zlego_hasla?p=1878356#id1878356
- https://4programmers.net/Forum/Bazy_danych/290517-ms_sql_wyszukanie_rekordu_bazy_danych?p=1878028#id1878028
- https://4programmers.net/Forum/C_i_.NET/364841-wprawka_do_oceny_i_podpowiedzi?p=1879294#comment-859615