Prośba o ocenę programu

Prośba o ocenę programu
Sandra
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:223
0

Dzień dobry wszystkim / cześć

Otóż mam taki oto pierwszy większy program. Jeszcze w trakcie prac ale jako, że nie mam pojęcia czy to się do czegoś nada i czy warto to rozwijać i poprawiać czy lepiej wyrzucić i zacząć od nowa to proszę o konstruktywną krytykę.

https://github.com/SandraMarszalek/Fakturowanie

Czego brakuje, a mam zamiar wprowadzić (o ile nie będzie już teraz wszystko do wywalenia):

  1. Czysty kod (jestem w trakcie lektury książki)
  2. Walidacja wprowadzanych danych
  3. Zapis pliku PDF pod wybraną nazwą i w wybranej lokalizacji
  4. Zapis słowny finalnej kwoty
  5. Dopracowanie ogólnych mniejszych i większych błędów, które widzę sama, np. przy kasowaniu wierszy tabeli głównej jeśli już wcześniej przeliczyłam finalne wyniki wartości w tabeli ostatecznej nie ulegają zmianie. A chciałabym żeby zmieniały się dynamicznie.
  6. Dopracowanie graficzne.

Oczywiście jeśli okaże się, że coś ten kod jest jednak wart (cokolwiek) to na pewno usprawnień będzie więcej. Generalnie jeśli będzie działać dobrze to będzie wykorzystany przez lokalne mikroprzedsiębiorstwo i dlatego część rzeczy jest już spersonalizowana pod wymagania tej firmy (np. dodatkowe uwagi do faktury czy możliwość rozliczania produktów 8% i 23% tylko na osobnych fakturach).

sugar_hiccup
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:176
1

C# to nie mój teren, ale takie ogólne spostrzeżenia:

  1. Kod piszesz po angielsku - bardzo dobrze. Kometarze też pisz po angielsku.
  2. Przydałoby się rozdzielić logikę od prezentacji, na razie większość się dzieje w jednym pliku Form1.cs
  3. Repozytorium: 1 commit, tzn. nie korzystasz z gita. Korzystaj z gita i nie ładuj do repo wykomentowanego kodu. Po to właśnie masz gita, żeby móc sobie ewentualnie wrócić do poprzednich wersji. Nie ma README, więc nie ma informacji, co to robi (są tu na forum, ale to tak ogólnie dobrze przyjęta i słuszna praktyka, żeby opisać co się zrobiło i jak to zbudować w repozytorium).

My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze
Silv
@sugar_hiccup: czemu masz taki awatar, jaki masz?
sugar_hiccup
bo ten gościu z defaultowego wygląda mi na korposzczura japiszona, więc mu urwałem głowę
Silv
Aha. Dzięki za wyjaśnienie…
Sandra
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:223
0

@sugar_hiccup: dzięki za komentarz. Nie ma nic więcej na GitHub bo jakoś tak robiłam i zawsze obiecywałam sobie, że wrzucę, a później przy wyłączaniu komputera uświadamiałam sobie, że znowu tego nie zrobiłam. Obiecywałam sobie ,że jutro... No i tak się zeszło do dziś. Miałam jedna wersję z samego początku jak zaczynałam cokolwiek w tym grzebać ale tamten początek był tak kompletnie od tej dzisiejszej wersji inny, że już wolałam zrobić nowe repo.
Co do uwagi o rozdzieleniu funkcjonalności - MVC też mam w planach tylko już sama nie wiem czy powinnam to zrobić teraz czy już na gotowym programie poprzenosić.

sugar_hiccup
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 2 lata
  • Postów:176
1

Co do gita, to commituj mało a często. Praca na zasadzie jeden dzień pracy - jeden commit to też nie ma sensu za bardzo. Jeden działający feature - jeden commit. Jeden bugfix - jeden commit.

MVC też mam w planach tylko już sama nie wiem czy powinnam to zrobić teraz czy już na gotowym programie poprzenosić.

Jak zakładasz sobie jakąś architekturę, no to oczywiście od razu ją implementuj. To co już masz, przerób, nie jest tego dużo, a dalej już rób w MVC. Im więcej będziesz miała kodu, tym ciężej będzie go przenieść i trudniej będzie planować kolejne ficzery.

Aha, no i testy pisz (;


My to na arm napiszemy wszystko i zrobimy co chcemy tyle że 90% kodu to biblioteki z netu albo robota kompilatora Zdajesz sobie sprawę że tak na prawdę wyższy poziom języka może świadczyć jedynie o tym jak niskim poziomem wiedzy może dysponować bałwan,który nazwie się w rezultacie programistą i napisze działający program wciskając zleceniodawcy że tam to akurat musi być 100MHz ARM z 1M pamięci bo tak na prawdę jego pusta łepetyna nie potrafi zrealizować czegoś na innym słabszym mikrokontrolerze
Sandra
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:223
0

No i właśnie testy to jest to czego jeszcze nie dotknęłam nigdy i trochę nie wiem jak zacząć :) a też ciężko znaleźć mi coś fajnie to zagadnienie tłumaczącego w sieci.

koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
2
Sandra napisał(a):

@sugar_hiccup: dzięki za komentarz. Nie ma nic więcej na GitHub bo jakoś tak robiłam i zawsze obiecywałam sobie, że wrzucę, a później przy wyłączaniu komputera uświadamiałam sobie, że znowu tego nie zrobiłam.

Trochę OOT, ale jak masz taki problem z pamięcią :) to możesz commitować rano, przed pracą, nie? :)

sugar_hiccup napisał(a):

Co do gita, to commituj mało a często. Praca na zasadzie jeden dzień pracy - jeden commit to też nie ma sensu za bardzo. Jeden działający feature - jeden commit. Jeden bugfix - jeden commit.

No nie wiem, od tego są gałęzie -- ale może masz na myśli commitowanie na serwer (choć ja i gałęzie zwykle pcham). Ja tam robię commity zawsze jak kończę/przerywam pracę (a i częściej), no i nie czekam aż mi coś działa...

koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
1

@Sandra: Teraz bardziej merytorycznie (ale znowu zaczniemy od gita :)):

  • Nie masz .gitignore a to się w jakiś sposób szybko zemści.
Sandra napisał(a):

No i właśnie testy to jest to czego jeszcze nie dotknęłam nigdy i trochę nie wiem jak zacząć :) a też ciężko znaleźć mi coś fajnie to zagadnienie tłumaczącego w sieci.

  • Testy -- jak nie wiesz jak robić (w sensie nie umiesz, nie masz podejścia, praktyki itp.), to rób jakkolwiek. Byle testy są lepsze (IMHO) od żadnych. Zrób sobie modulik (lub kilka), który będzie Ci po Twojemu testował, co napisałaś (niech wyświetla wyniki itp.) -- tak, żebyś Ty wiedziała, czy działa w różnych przypadkach. Warto też zainteresować się TDD (w skrócie -- najpierw piszesz testy, a potem to, co ma w nich działać).

  • Trochę z przerażeniem patrzę na tasiemcowe klasy/metody... W pliku Form1.cs masz klasę Invoice, która się ciągnie przez cały plik (ponad 400 linii), ale to jeszcze pół biedy. Są tam funkcje (motody), które nie sposób ogarnąć wzrokiem (a więc i umysłem), ale zdecydowanie najgorsza to PDF_Click (linie 313--429!). Musisz ją podzielić na sensowne mniejsze funkcje, które robią konkretnie wydzielone podzadania (i sensownie nazwane), bo się zgubisz.
    [Chyba, że to metoda wygenerowana automatycznie i właśnie robię z siebie idiotę... :)]

  • Masz zakomentowane fragmenty kodu. Gdybyś używała gita, nie musiałabyś tego robić, a nie wróży to niczego dobrego... [C5 z "Czystego kodu" Roberta Martina]

Sandra
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:223
0

@koszalek-opalek: wiem, że te tasiemce nie są najszczęśliwsze ale to pierwszy taki program (tak wiem marne tłumaczenie) i jakoś tak dodawałam kolejne rzeczy, na które wpadłam i tak to sobie szło... :) No tak wyszło. Poprawie na pewno. Już myślę, że samo MVC trochę to rozwiąże. A resztę jakoś popakuję ładniej. Chociażby to nieszczęsne PDF-Click :D tutaj tak bardzo skupiłam się na ogarnięciu itext, że już nawet długość przestała mi przeszkadzać xd

Co do gitignore - nie jestem w sumie pewna czy dobrze rozumiem jego założenie. Może jak tutaj napisze jak to rozumiem to nakierujesz mnie czy słusznie czy źle to rozumiem. Do gitignore powinnam wpisać wszystkie pliki poza tymi, które już mam w repo tak? Nie byłam pewna co zrobić z plikiem do bazy danych ...

Testy na pewno muszę spróbować zacząć robić. Nigdy żadnego nie robiłam więc trochę się boję, że nie dam rady...taka głupia obawa.

Komentarze znikną. Commity się pojawia :) kwestia wyrobienia nawyku. Muszę sobie przykleić jakaś kartkę na monitor z przypomnieniem.

edytowany 1x, ostatnio: Sandra
MexikanoS
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad rok
2

Jeśli zapatrujesz się przyszłościowo na pisanie w C#, to staraj się oddzielać rzeczywisty kod od formy. Z klas formy korzystaj tylko w momencie, kiedy rzeczywiście musisz na niej wykonać jakąś operację.

Poza tym, jak widzę więcej niż jedną linijkę odstępu między kodem + spację pomiędzy if/while/switch/whatever do nawiasu to krew mnie zalewa.

Pozdrawiam.

Sandra
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:223
0

@MexikanoS: czyli generalnie praktyka jest taka żeby nie robić spacji? Cóż przyznam, że tak mnie uczono jeszcze w czasach liceum i tak z tym zostałam nie zastanawiałam się nad tymi spacjami. Tak było czytelniej jakoś - pewnie dlatego, że tak mi wpojono

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
1

@Sandra: co do odpowiedzi @MexikanoS - zgadzam się, rób jedną linijkę odstępu pomiędzy metodami:

Rozumiesz o co chodzi? :)

Co do spacji po if/while/try/catch/etc to ja osobiście nie widzę nic złego w stawianiu spacji po tych słówkach, sam osobiście tak robię i wygląda to dla mnie czytelniej, nawet sam Microsof w swojej dokumentacji tak robi więc :)


koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 lata
2
Sandra napisał(a):

Co do gitignore - nie jestem w sumie pewna czy dobrze rozumiem jego założenie. Może jak tutaj napisze jak to rozumiem to nakierujesz mnie czy słusznie czy źle to rozumiem. Do gitignore powinnam wpisać wszystkie pliki poza tymi, które już mam w repo tak? Nie byłam pewna co zrobić z plikiem do bazy danych ...

Moim zdaniem nie do końca dobrze to rozumiesz. :)

Póki dodajesz pliki po jednym, konkretne, to bez tego pliku wytrzymasz. Wydaje mi się on jednak bardzo praktyczny, bo prędzej czy później ktoś (nie koniecznie Ty, to może być Twój współpracownik w projekcie) doda cały podkatalog i pójdzie do repo ze śmieciem. No .gitignore jest do odfiltorowania tego śmiecia. Zwróć uwagę na dostępne wzory takich plików, na przykład (do C#) ten:
https://gist.github.com/brazilnut2000/8226958
Obejmują one różne pliki, które mogą pojawić się "same" w związku z używaną technologią, edytorami, kompilatorami itp.

Rzuć okiem może jeszcze tu:
https://www.pluralsight.com/guides/how-to-use-gitignore-file
https://www.atlassian.com/git/tutorials/saving-changes/gitignore
https://help.github.com/en/github/using-git/ignoring-files

Sama składnia jest bardzo prosta -- w skrócie:

  • # to komentarz
  • jedna linijka (nie pusta i niezakomentowana) == jeden wzorzec pliku
  • * we wzrocu == wiadomo :)
  • ** we wzorcu == dowolna ścieżka dostępu (nie tylko katalog)
XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
1

@Sandra: tu masz przykładowy wzór pliku .gitignore, który byś mogła użyć w swoim projekcie WinForms - https://github.com/AdamsLair/winforms/blob/master/.gitignore


Sandra
  • Rejestracja:ponad 8 lat
  • Ostatnio:12 miesięcy
  • Postów:223
0

@XardasLord:
@koszalek-opalek:
Wielkie dzięki :) będę poprawiać i pojawię się na pewno z kolejną wersją. Oczywiście jakbyście jeszcze coś zauważyli to czekam na info :)

XardasLord
  • Rejestracja:ponad 11 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Gdańsk
  • Postów:271
1

@Sandra: No to tak żeby się jeszcze poprzyczepiać :)


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)