Prośba o wskazanie największych błedów

0

Witam,
Z C# mam styczność ok.6 miesięcy lecz nie jest to czas intensywnej nauki każdego dnia, ze względu na studia jest to niewykonalne ale 2 razy w tygodniu staram się coś pisać no i czytać książkę przeznaczoną do nauki tego języka. W załączniku przesyłam wam mój program, który napisałem przez święta jest to przykład banalnej biblioteki/sklepu z oddzielnym panelem dla admina i oddzielnym dla użytkownika, z tego co gdzieś czytałem main powinien być jak najkrótszy mi się to w ogóle nie udało chciałbym abyście mi doradzili na podstawie tego programu jak mógłbym to zrobić, mam dużo "case-ów" nie wiedziałem jak potem wyodrębnić z tego metody. Ogólnie estetyka na pewno też nie zachwyca. Prosiłbym o jakieś cenne rady nie typu to nie dla Ciebie ten program jest do d**y rzuć programowanie itd (Znaczy się program jest do d**y może być ale potem daj cenną rade jak coś poprawić, a nie jak zrezygnować ). Nie wiem czy to możliwe żebym do września na tyle rozwinął swoje umiejętności w tym języku żeby dostać się na staż, jeżeli tak to też powiedzcie w, którym kierunku iść przez najbliższe miesiące.

2

Oj, chyba ktoś to mało przetestował... (komentarz do ProBook, bo ten pierwszy załącznik nie ma rozszerzenia i nie wiem, co z nim zrobić)

Uwagi użytkownika:

  1. Kiedy jest lista wyboru {szukaj, zaproponuj, pokaż koszyk}, nie ma możliwości "powrotu" np. wylogowania.
  2. Aha, jest... Wybrałam szukanie według tytułu, wpisałam bzdurny tekst i zapytało, czy chcę się wylogować. Powinien raczej być komunikat, że nie ma takiego tytułu, a opcja wylogowania powinna być na liście wyboru.
  3. Brakuje możliwości zamknięcia aplikacji inaczej niż przez kliknięcie krzyżyka. Też dodać do listy opcji.
  4. Wybrałam szukanie według autora i wpisałam bzdurny tekst, zero wyników. Zapytało, czy chcę wypożyczyć którąś z tych książek i jeszcze brniemy w to dalej - którą pozycję chcę. Powinno być zabezpieczenie sprawdzające, czy są wyniki i możliwość powrotu do menu z szukaniem itd. A jeśli już wpisuję pozycję i jej nie ma, to wolałabym móc wpisać inną, a tu od razu pada pytanie, czy wylogować.
  5. Nie ma możliwości usunięcia czegoś z koszyka.
  6. Przydałaby się możliwość sprawdzenia, jakie książki w ogóle są. Ja akurat szczęśliwie trafiłam bez patrzenia w kod. :D
  7. Aplikacja się wywala, gdy poda się nieprawidłowe dane logowania.
  8. Wpisanie roku, który nie jest liczbą, pozwala na dodanie książki mimo to. Generalnie podawanie danych nieprawidłowych powinno skutkować sensownym komunikatem i możliwością poprawienia tych danych lub anulowania akcji, ale wstrzymywać dalsze przetwarzanie.
  9. Można usunąć wszystkie konta, w tym admina. :]
  10. Komunikaty zawierają błędy językowe.
    Uwagi programistyczne:
  11. Skoro jesteś nowicjuszem, to można wybaczyć, ale lepiej nazywać klasy, metody itd. po angielsku, tak jak w klasach itd. już istniejących w języku.
  12. Brak konsekwencji w nazewnictwie. Tak jak z angielskim, warto stosować konwencje z języka programowania. Nazwy klas i właściwości zaczynać od wielkiej litery, pola prywatne i parametry metod od małej.
  13. Klasa Book: jest tam definicja operatora, którego sensu nie rozumiem, poza tym on tylko rzuca wyjątek NotImplemented - to chyba przeoczenie?
  14. Klasa ISBN - po co? ISBN to jest integralna cecha książki.
  15. Klasa Autor ma jedną właściwość na imię i nazwisko. To są dwie dane, powinny być osobno, zwłaszcza że ma to sens w życiu - częściej pamięta się samo nazwisko autora i według niego się szuka.
  16. Klasa Biblioteka: nigdzie nie jest używany konstruktor. Ponadto zawiera tylko dane statyczne. Jako nowicjusz mógłbyś zrobić z niej klasę statyczną, bo mamy tylko jedną bibliotekę, ale "w życiu" bardziej elegancko byłoby wzorcem projektowym Singleton (podejrzewam, że nie masz pojęcia o wzorcach, ale do dobrej pracy w którymś momencie jest to niezbędne).
  17. Klasa Book: konstruktor bez parametrów nie jest nigdzie używany. W związku z tym niepotrzebnie są inicjalizowane Autor i Wydawnictwo, skoro wszystkie używane konstruktory coś do nich przypisują.
  18. Wydawnictwo w ogóle może być prywatne, nikomu nie jest potrzebne.
  19. Klasa Konta: nazwa powinna być w liczbie pojedynczej. ZbiorUzytkownikow nie powinien się tu znajdować, mimo że zawiera konta. Poza grupowaniem danych w klasy na podstawie tego, czy dotyczą tego samego "tematu", powinno się brać pod uwagę zależności między klasami. Dane użytkowników sensownie jest przechowywać w bibliotece i to ona powinna mieć taką właściwość.
  20. Metody takie jak Pobierzhasło są charakterystyczne dla Javy. W C# do prostego pobierania danych (kiedy jest samo return lub jakieś drobne przetwarzanie np. sklejanie stringów) zwykło się używać właściwości.
  21. Klasa Program: zmienne koniec i zakoncz mogą mieć tylko 2 wartości, więc powinny być typu bool.
  22. Nazwy metod itd. powinny odzwierciedlać, do czego dany twór służy. convert1, Dual, Logowanie nie mówi nic. Numerowanie zmiennych to jest zły pomysł ogólnie.
  23. Opcje z case też można wydzielać do osobnych metod. Niekoniecznie z każdego case, ale chociaż z tych najbardziej zewnętrznych, które są bardzo rozbudowane. Sygnałem do tworzenia osobnych metod są zawarte już w kodzie komentarze - zakładanie konta, logowanie itd. Wtedy się main bardzo skróci. Obecnie ciężko całkowicie ogarnąć, co ta kobyła robi.
  24. Wprowadzenie danych początkowych (książki, użytkownicy) też do osobnej metody, bo nie ma ścisłego związku z dalszymi działaniami.
  25. Odpowiedź na pytanie o chęć wylogowania jest sprawdzana tylko pod kątem, czy wpisano "nie" (jakąkolwiek wielkością liter). Każdy inny tekst jest traktowany jak "tak". To powinno być sprawdzane dokładniej - jak wcześniej podałam, w przypadku nieprawidłowego tekstu (ani "tak", ani "nie") powinien być komunikat o nieprawidłowości i pytać do skutku.
    Ogólnie mam wrażenie, że chciałeś dobrze i dać dużo funkcji, ale chyba od razu pisałeś kod zamiast przemyśleć te funkcje. Warto zrobić sobie na początek jakiś plan w formie punktów czy rysunku, gdzie będzie rozpisane, co użytkownik może zrobić i dokąd przejdzie w każdym przypadku. Potem te kroki stopniowo wprowadzać i po każdym dodanym sprawdzać, czy to faktycznie działa zgodnie z planem.
0

Jestem serio pod wrażeniem, że chciało Ci sie aż tyle napisac i wypunktować moje błędy, oczywiscie jestem Ci za to bardzo wdzięczny bo bałem sie troche, że nikt mi nic bie odpowie widząc ilośc pobrań, a brak odpowiedzi☺️ Odnośnie programu to postaram sie poprawić te wszystkie rzeczy, część z tych błędów jest spowodowana tym, że podczas programy i dodawania kolejnych opcji mój "main" sie rozrastał i ta nieświadomości czy na sile próbować robic z tego metody czy zostawić tak jak jest nie dawała mi spokoju i musiałem juz sie kogos doradzić

0

Szaczun dla @ness ze jej się chciało :)

CO do tego jak pisać kod polecam książkę Clean Code wujka Boba. To nic że to Java, to nic, jeśli nie zrozumiesz wszystkiego albo tylko zaczniesz przeglądać na początku.

Co do studiów - nie potrzebujesz skończyć informatyki żeby zostać programistą.
Są programiści po telekomunikacji, automatyce, fizyce... i bez studiów też.

0

A jakies konkretniejsze rady?

0

Ta z clean code była konkretna, ksiazka refactoring też jest okey, bedzisz miał na czym poćwiczyć ;) .Staraj się nie robić żadnych powtórzeń jeśli gdzieś masz 2 razy ten sam kod wydziel to na osobną metodę. I nie pisz klas bez metod, do daj ksiązke, usuń ksiązke można przerzucić do klasy biblioteka. I masz tam pełno błędów bo nie sprawdzasz warunków brzegowych, można w prowadzić na książkę o ujemnej cenie. zamist try parse conver itd możesz wrzucić try parse od razu do if'a.

0

Chodziło mi o rade, co muszę jeszcze ogarnąć żebym od września mógł się starać o jakiś staż, rzeczy zaproponowane przez was wdrożę w życie ale co więcej ogarniać przez najbliższe miesiące żeby ktoś w ogóle chciał ze mną rozmawiać, jak uda mi się poprawić tą aplikację wstawię ją ponownie do oceny, a teraz chodzi mi bardziej o to czy np czy osoba idąca na staż musi ogarniać coś z MVC, bazy danych itp. ?

0

Polecam książkę
Adam Freeman Pro ASP.NET MVC X
Gdzie X to wersja, im nowsza tym lepiej, ale nawet z 4 będzie OK dla Ciebie.

1

Też polecam Freemana do MVC. Osoba idąca na staż niekoniecznie musi akurat to umieć, zależy od firmy docelowej. Można pisać w ASP.NET MVC, ASP.NET WebForms, WinForms, WPF - to są alternatywy, ewentualnie w ramach jednej firmy może być więcej niż jedno, ale nie słyszałam, żeby ktoś używał wszystkich. Oczywiście, im więcej się zna, tym większy wybór pracy. Bazy danych na pewno wypada znać chociaż w podstawowym stopniu, w przypadku .NET naturalnie najlepiej iść w SQL Server i Entity Framework.

0

Do tego, co napisała @ness należy dodać, że obecnie coraz częściej backend jest jakimś restowym API, czyli WebAPI w przypadku .NET, natomiast po stronie klienta stoi jakiś modny framework typu Knockout, Angular, React, czy co tam w Jsamour pisali w tym miesiącu.

A tak ogólnie, to wzorce projektowe i dobre praktyki są równie ważne jak konkretne technologie. Przynajmniej na rozmowach kwalifikacyjnych, bo później to już różnie bywa.

0

Okej czyli składając to w całość w najbliższych miesiącach przyjmę następujący plan :

  1. Poprawię tą aplikacje żeby to miało ręce i nogi, kod żeby był bardziej elegancki i poprawię obsługę wyjątków
  2. Dokończę czytać obecne książki czyli http://helion.pl/ksiazki/jezyk-c-2010-i-platforma-net-4-troelsen-andrew,a_0062.htm i Essential C# 6.0
  3. Po tych książkach przystąpię do której pozycji opisującej MVC, i Clean Code.(Mam nadzieje że do wakacji przeczytam te 4 książki)
  4. W między czasie będę coś pisał no i w wakacje postaram się każdego dnia spędzać parę godzin na pisaniu i angielskim po czym we wrześniu poszukam sobie jakieś stażu ;)

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