Prośba o opinię na temat kodu mojej pierwszej aplikacji.

Prośba o opinię na temat kodu mojej pierwszej aplikacji.

Wątek przeniesiony 2015-09-16 20:01 z Newbie przez Shalom.

AP
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 8 lat
  • Postów:2
0

Dzień Dobry,

To mój pierwszy post na forum. Chciałem prosić opinię co do kodu źródłowego mojej pierwszej aplikacji. Nie chodzi mi tutaj o jakieś dokładne sprawdzanie, ale o rzucenie okiem czy choć trochę przypomina to programowanie. Czy jest sens chwalić się takim kodem przed ewentualnym przyszłym pracodawcą? Ta aplikacja mniej więcej odzwierciedla poziom w jakim opanowałem język Java. Uświadomcie mnie jak bardzo jestem jeszcze na początku tej drogi i czy staranie się o pracę/praktykę ma sens na tym etapie. (znam jeszcze podstawy Hibernate i MySQL)

Sam program powstał z potrzeby mojego szwagra który chciał mieć coś co pomoże mu szybciej wystawić faktury dla klientów. W skrócie program potrafi generować plik excel z fakturą z wypełnionymi danymi wpisanymi w formularz aplikacji. Posiada także bazę klientów. Wszystkie dane zewnętrzne zapisywane są w plikach *.txt. Wiem już, że to nie jest idealne rozwiązanie. Nad programem nadal pracuje, ale główne założenia udało się zrealizować. Program działa.

Proszę o opinię.

Link do repozytorium:

https://github.com/ArturPalczynski/Faktura

2c2c9f2900.png

edytowany 1x, ostatnio: flowCRANE
Zobacz pozostałe 4 komentarze
flowCRANE
@niezdecydowany - ostatni raz powtarzam, że komentarze NIE służą do flame'u i NIE służą do docinek; Więc jeśli jeszcze raz uczepisz się mnie i zaczniesz takimi odzywkami docinać mi to pozbawię Cię dostępu do forum na długo; Więcej nie będę ostrzegał;
niezdecydowany
niezdecydowany
a czy w regulaminie jest zdefiniowane do czego SŁUŻĄ komentarze ?? bo żeby napisać że coś nie jest do czegoś, musisz wiedzieć do czego to coś jest, a ja w regulaminie forum nie znalazłem na ten temat ani słowa.
flowCRANE
Po pierwsze to wielokrotnie było pisane do czego komentarze służą - do off-topu, a nie do trolowania, więc nie udawaj zdziwionego; Po drugie - regulamin zawiera informacje na temat całego serwisu, a nie całego forum; Zapamiętaj to sobie raz na zawsze;
Shalom
@niezdecydowany regulaminem się nie zasłaniaj - https://www.youtube.com/watch?v=cAaeNBN3Zk4 ;)
niezdecydowany
niezdecydowany
:D:D:D:D:D
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
5

Rzut okiem w kod a tam takie cuda:

Kopiuj
//funkcja któraprzyjmuje liste obiejktów customer i zwraca wiersz z jego danymi przedzielonymi #
public String getClientInfo(ArrayList<Customer> theList){
    String[] table = new String[theList.size()];
    return null;
}

Nie dość że komentarz kłamie to jeszcze nie pojmuje jaki byłby sens istnienia takiej funkcji ;]

To też dobre:

Kopiuj
excelFile =  new File("D:/Faktura.xls");
workbook = Workbook.getWorkbook(excelFile);
workbookCopy = Workbook.createWorkbook(new File("C://Users//Gosia//Desktop//Clients.xls"), workbook);

Rozumiem że nie warto wg ciebie tych ścieżek podawać jednak gdzieś w konfiguracji? Jak postanowisz użyć tego na komputerze gdzie nie ma użytkownika "Gosia" to będziesz kompilował program drugi raz? :D

A tu: https://github.com/ArturPalczynski/Faktura/blob/master/Excel.java#L141 to mam nadzieje że nie są prawdziwe dane z peselem...

A tak poza tym to ta aplikacja raczej niewiele robi a całą "logikę" zamknąłeś w dwóch stanowczo za długich funkcjach. Poczytaj może na przykład o czymś takim jak MVC i MVP? No i nie używał designera z NetBeansa bo ssie niemiłosiernie.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Shalom
@ArturPalczynski samo commitowanie zmian do repo nic nie da bo system kontroli wersji ma to do siebie że trzyma cała historię -> https://github.com/ArturPalczynski/Faktura/commit/4c9672c9cbd613d8429217ac1148658c69c7d3cb ;)
AP
Dane nie zawierają peselu. To przypadkowy numer.
NZ
Szkoda, już zaczynałem myśleć, że urodziłeś się 35 lutego.
0

http://znanefirmy.com/firma/396087/kamil-dziecielewski-montaz-dach.html
Dane się zgadzają : D
Lepiej szybko usuń repo kolego.

EL
  • Rejestracja:około 13 lat
  • Ostatnio:3 miesiące
3

Proponuję przeczytać "Czysty Kod" Wujka Boba, gdyż:

  1. w ten sposób nie nazywa się metod:
Kopiuj
 public void SaveExcel(Customer customer, JTable jtable) throws FileNotFoundException, IOException, InvalidFormatException{
     
  1. formatowanie pionowe naprawdę ma znaczenie:
Kopiuj
 public void setName(String name){
        
        this.name = name;
        
        
    }
  1. komentarze w takim przypadku są passe:
Kopiuj
 //funkcja któraprzyjmuje liste obiejktów customer i zwraca wiersz z jego danymi przedzielonymi #
    
    public String getClientInfo(ArrayList<Customer> theList){
   
  1. 'magic number' nie pomagają w czytaniu kodu:
Kopiuj
 if(t.getValueAt(x, 1) == null){
                        break;
                     }

I tak dalej i tak dalej... Z innych rzeczy to to powinno być stałymi:

Kopiuj
int initialRow = 15;
        int cellLP = 2;
        int cellTowar = 3;
        int cellCena = 12;
        int cellRabat = 15;

Takie rzeczy nie powinny istnieć:

Kopiuj
workbookCopy = Workbook.createWorkbook(new File("C://Users//Gosia//Desktop//Clients.xls"), workbook);

ale o tym napisał już @Shalom

Pola powinny być prywatne:

Kopiuj
Customer customer1;
    WritableWorkbook workbookCopy;
    Workbook workbook;
    WritableSheet sheetCopy;
    Sheet sheet;
    File excelFile;
    File excel;

Takie rzeczy z kodu usuwa się najlepiej od razu ponieważ jeśli za miesiąc siądziesz do aplikacji to dam sobie rękę uciąć że będziesz się zastanawiał "co autor miał na myśli" i czy to jeszcze jest potrzebne czy nie:

Kopiuj
 //CellStyle style = wb.createCellStyle();
        //style.setWrapText(true);

Ciekaw jestem w jaki sposób w tym miejscu mogą polecieć te wyjątki :o

Kopiuj
public void createCustomerFromTable(String[] t) throws IOException, BiffException, WriteException{
      

        this.name = t[0];
        this.sureName = t[1];
        this.address = t[2];
        this.nazwaFirmy = t[3];
        this.nip = t[4];
  
    }

W pracy często ludzie pytają mnie dlaczego tak się czepiam formatowania pionowego... No właśnie dlatego, potem zamiast spójnego kodu mamy nawalone spacji i enterów bo tak było wygodniej. NIE NIE i NIE. Formatowanie pionowe MA ZNACZENIE.

Metoda:

Kopiuj
 public void writeExcelTable(JTable t) throws IOException, BiffException, WriteException{
     

całkowicie do poprawy. Duplikacja kodu jest bardzo bee a naprawdę widać jak łatwo i szybko można to skrócić.

Widoków nawet nie sprawdzam bo widzę że NetBeans działał ostro :)

Proponuję:

  1. Poczytać o wzorcu MVP
  2. Przeczytać czysty kod
  3. Aplikację zostawić sobie na pamiątkę ale schować i przepisać od nowa.

Ps.

Kopiuj
/**
 * Hibernate Utility class with a convenient method to get Session Factory
 * object.
 *
 * @author Gosia
 */
public class NewHibernateUtil {

Bywasz czasem kobietą ;> ?

edytowany 1x, ostatnio: eL
AP
Dziękuje bardzo za uwagi :) Kobietą nie bywam. Działam z komputera mojej żony ;)
EL
To tak na przyszłość, komentarze typu "autor" też są passe:). Powodzenia w dalszej nauce!
Haskell
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 miesięcy
  • Postów:4700
6

@ArturPalczynski - Kolego po pierwsze brawo, że Ci się chciało i napisałeś program, który prezentuje Twoje umiejętności. Po drugie nie słuchaj kolegów powyżej :P To znaczy zwróć uwagę na punkty, który wskazali, ale nie słuchaj rad, że masz cały kod schować do szuflady. To, że są w nim błędy wskazane przez przedmówców wcale go nie skreśla. Pokazywanie własnego kodu, który prezentuje Twój aktualny poziom wiedzy jest bardzo dobre. Każdy na początku pisał kiepski kod i robił błędy.

Oczywiście musisz mieć świadomość, że Twój kod nie jest doskonały, musisz się ciągle doszkalać. Ale najważniejsze żebyś nie przestawał pisać własnego kodu. Przesadne dążenie do doskonałości w prostej linii doprowadza do prokrastynacji, ponieważ wydaje się, że lepiej nie napisać nic niż napisać coś kiepskiego. Doprowadza to również do sytuacji, że przychodzisz na interview na programistę Java i wychodzisz na osobę, która nic nigdy w tej Javie nie programowała, ponieważ wstydzisz się pokazać co napisałeś. Jeżeli pokażesz swoje portfolio nawet kiepskie to zrobisz lepsze wrażenie niż osoba, która nie ma nic do pokazania.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
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)