• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena kodu - Pierwszy program obiektowo w c#

VPS Starter Arubacloud
+1 głos
305 wizyt
pytanie zadane 15 sierpnia 2019 w C# przez luna22 Obywatel (1,420 p.)
edycja 15 sierpnia 2019 przez luna22

Witam. Dopiero co zaczęłam uczyć się platformy .Net i języka C#, w tym OOP. Stworzyłam prosty programik w konsoli z listą produktów. Program nie jest skończony, ponieważ do zrobienia jest jeszcze obsługa błędów (jest ich sporo ale dopiero to będę przerabiać) i kilka innych rzeczy. Chcę tylko pomocnej opinii,  jak to wygląda z przedstawieniem samego kodu bo myślę, że trochę pobłądziłam między klasami. Gdyby ktoś miał chwilę wolnego czasu i podania mi kilku wskazówek bo w tym momencie nie wiem jak samemu wyłapywać błędy :(

Program

3 odpowiedzi

+1 głos
odpowiedź 15 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)
Sprawdź sobie czym jest plik gitignore i jak z niego korzystać, jakie filtry są polecane dla .NET i C#. Przede wszystkim foldery bin i obj nie powinny znajdować się na repo. "Często gęsto" te foldery mogą dużo ważyć, a każdy kto ściągnie repo i tak sobie je utworzy podczas builda. To tam ląduje kod wynikowy podczas wykonania builda. Gwoli ścisłości w folderze bin bo obj jest do czegoś innego.

Oprócz tego spoko no. Prosta apka konsolowa, ładnie napisana jak na początek. Kilka uwag zawsze mogę zostawić ale jeśli czegoś nie do końca zrozumiesz na ten moment to się zwyczajnie nie przejmuj, baw się, eksperymentuj, oglądaj tutoriale. To jest ten czas.

Co do tych uwag co je miałem zostawić:

Masz silnie powiązaną aplikację z konsolą. W każdej, lub większości klas masz użycie Console.WriteLine. Jeśli chciałbyś Zamiast na konsole to utworzyć ze swoich klas na przykład stronę internetową to byłoby dużo roboty nad zmienianiem kodu. To jest generalnie źle patrząc pod kątem dobrych praktyk. Rozsądnie byłoby rozdzielić aplikację na warstwę danych, warstę dostępu do danych i logiki (domena) i warstwę prezentacji. O co mi dokładnie chodzi, już tłumaczę. Warstwa dostępu do danych to klasy, które albo łączą się z bazą danych lub odczytują/zapisują dane z/do pliku lub, jak w Twoim przypadku, mogłaby to być klasa, która przechowuje listę Twoich produktów.

Warstwa dostępu do danych, to warstwa, która potrafi na wyżej opisanej klasie wywołać pewne akcje. Klasa tej warsty może mieć metody GetProducts (zwraca wszystkie produkty), AddProduct(dodaje nowy), EditProduct(edytuje podany produkt).

Warstwa Prezentacji: klasy tej warstwy korzystają z klas dostępu do danych aby wykonać zażądane przez użytkownika akcje. Ta warstwa jako jedyna może mieć metody z klasy Console. Dzięki takiemu podziałowi odpowiedzialności, gdybyś ze swojej aplikacji chciał zrobić API albo stronę internetową, albo nawet aplikację reagującą na głos to musisz podmienić tylko tą jedną warstwę :)

Tak jak pisałem. Jeśli nie do końca to czujesz to znaczy, że jeszcze na to za wcześnie. Nie musisz się męczyć teraz, na wszystko przyjdzie czas. Jeśli jednak rozumiesz przesłanie to bardzo się cieszę i gratuluję szybkich postępów w nauce.

Baw się dobrze przy programowaniu i powodzenia w dalszych wyzwaniach.
komentarz 15 sierpnia 2019 przez tkz Nałogowiec (42,000 p.)
komentarz 15 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)
Fajne, nie znałem, dzięki ;)
komentarz 15 sierpnia 2019 przez luna22 Obywatel (1,420 p.)

@Rafajah, Jeśli chodzi o gita to dopiero się za niego zabiorę (tutaj było na potrzeby zapodania kodu) ale dzięki, że zwróciłeś uwagę :)

 

Co do drugiej części to rozumiem o co chodzi ale jeszcze o dzieleniu na warstwy nie słyszałam. Poczytam o tym na pewno bo zmierzam do budowania serwisów internetowych w przyszłości, a tak na szybko, czym fizycznie są te warstwy ? Chodzi o katalogi, moduły czy może kwestia logicznego uporządkowania ?

Dzięki za spojrzenie na kod i opisanie przydatnych wskazówek :)

 

komentarz 15 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)
W dobrą stronę kombinujesz :)

Tak, te warstwy to pewne abstrakcyjne pojęcie, które "fizycznie" objawia się podzieleniem Twoich klas na foldery, a jeszcze lepiej na oddzielne projekty w ramach jednej solucji.

W Twojej solucji jest aktualnie jeden projekt nazwany WarehouseApp.csproj umieszczony w folderze WarehouseApp.

Dodać dodatkowy projekt do istniejącej solucji możesz w taki sposób:

Klikasz prawym przyciskiem na solution (w oknie solution explorer na samej górze), rozwijasz add i wybierasz new project. Typ projektu library.

No i w takiej solucji dla typowego, prostego programiku możesz mieć Warehouse.Data, Warehouse.Services i Warehouse.App (ta warstwa prezentacji, konsoli. Ten projekt jako jedyny byłby zamiast typu library to typu console application). Wtedy dwie pierwsze warstwy masz całkiem uniwersalne, niezależne od tego czy prezentacja jest za pomocą konsoli, aplikacji okienkowej czy jest czytana przez Ivone :D

Podsumowując, po tych zabiegach będziesz miała kilka folderów, a nie jeden i kilka osobnych plików z rozszerzeniem csproj.

Natomiast tak jak mówiłem. Nie wiem czy już czas na to czy może lepiej szlifuj na razie wiedzę z C#, a porządkowaniem projektu zajmij się za jakiś czas. Jak uważasz :)
komentarz 15 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)

Dopiero teraz zauważyłem "słyszałAM" w twojej wypowiedzi i gorączkowo zacząłem przeglądać swoje komentarze czy gdzieś nie zwróciłem się do Ciebie jak do mężczyzny (czasownik z końcówką "eś" zamiast "aś") laugh Tak w ramach wieczornego śmieszku.

komentarz 16 sierpnia 2019 przez Wraith Gaduła (4,370 p.)
A co nie spoedziewałeś/aś się że laska moze napisac taki dobry kod? swoja droga ty tez masz damski nick. Kojarzy sie z Rafalala
komentarz 16 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)
90% ludzi w branży to faceci, nie trudno nie pomyśleć, że może tym razem ma się do czynienia z kobietą. A mój nick powinien Ci się kojarzyć z imieniem Rafał ale co ja tam wiem :D
komentarz 16 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)
A jeszcze btw Twojego pytania. Kobiety piszą kod dużo schludniej niż faceci. Oczywiście generalizując bo poszczególne przypadki mogą być różne. Bardzo żałuję, że nasza branża jest tak uboga w płeć piękną bo bez wątpienia więcej kobiecego oka w projektach byłoby na plus dla jakości pisanego softu.

Więc odpowiadając. Kompletnie nie dziwi mnie, że kobieta może napisać dobry kod.
komentarz 16 sierpnia 2019 przez Wraith Gaduła (4,370 p.)

@Rafajah, ale mi sie to kojarzy od Kajah i to jah mi sie kojarzy ze to zenski nick ale oczywisnie nie mowie zeby orbazic takie ot skojarzenie pewnie

+1 głos
odpowiedź 16 sierpnia 2019 przez Siemił Mądrala (7,380 p.)

Dodam coś od siebie:

1). WarehouseProgram.StartProgram(), w tej metodzie masz wszystko: tworzenie obiektów, pętle programu, drukowanie na konsoli.
Pomyśl o odchudzeniu jej. 

2). Używasz int.Parse() a nie łapiesz wyjątków. W takim wypadu lepiej użyć int.TryParse().

3). Pamiętaj że wszystko może być obiektem. Rozważyłbym użycie obiektu MenuItem. Samo menu przechowywało by kolekcję menuItem'ów.

Pozatym zgadzam się z Rafajah. Powinnaś wszystko co dotyczy konsoli wrzucić do osobnej klasy. I jak chcesz coś wyświetlić to używasz tylko metod tej klasy. Na architekturę czy też wzorce projektowe przyjdzie jeszcze czas. Szlifuj czysty c#. Powodzenia.

–1 głos
odpowiedź 15 sierpnia 2019 przez Wraith Gaduła (4,370 p.)
Za wyjatkiem paru kosmetycznych rzeczy mi sie kod podoba.

Podobne pytania

0 głosów
2 odpowiedzi 299 wizyt
pytanie zadane 7 listopada 2017 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)
0 głosów
3 odpowiedzi 389 wizyt
pytanie zadane 16 stycznia 2019 w Python przez niezalogowany
0 głosów
1 odpowiedź 431 wizyt
pytanie zadane 3 października 2017 w C# przez Kodeman Gaduła (4,480 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...