Wątek przeniesiony 2017-10-11 21:22 z Off-Topic przez furious programming.

VfNotes - program do szybkich notatek.

0

Witajcie, napisałem w C++ z użyciem Qt program do szybkiego i wygodnego zarządzania notatkami. Po lewej stronie znajduje się lista z notatkami, po prawej pole do edycji notatki. Program ten z założenia ma pomóc szybko i wygodnie zarządzać krótkimi notatkami, szybciej niż z użyciem notatnika. Jego obsługa jest też w tym celu uproszczona do maksimum. Jak ogólnie oceniacie program pod względem praktycznego użycia oraz jakości kodu?
Kod źródłowy: https://github.com/arkadiusz97/VfNotes
Skompilowany program: https://drive.google.com/file/d/0B07MSKkbPwjBTzh1bVMyZF8zWmM/view
zdjęcie

0

No cóż, Evernote, czy OneNote mi tym nie wygryziesz ;p
Jest spoko, ale apka prosi się przede wszystkim o skróty klawiszowe.

5

Techniczne:

  1. Zakomentowany kod - po to masz podpięty system kontroli wersji, że w razie potrzeby w historii zajrzysz co tam było - naprawdę do prezentacji nie jest on kompletnie potrzebny.
  2. Za bardzo oszczędzasz na białych znakach, np. tu: stream<<ui->plainTextEditContent->toPlainText().toUtf8()
  3. Kod sam się komentuje, jeśli wszystko pakujesz w funkcje i metody z sugestywną nazwą - ty masz wszystko upakowane w eventy.
  4. Testy, testy

Nietechniczne:
5. Nie dostarczyłeś screenów, szkoda - sam nie zamierzam nic pobierać, a tak mógłbym zobaczyć jak aplikacja wygląda
6. Angielski z README jest na niezbyt wysokim poziomie (ucięty phrasal verb allow to i inne).

Co do użyteczności: Gratuluję, napisałeś notatnik. Nie wiem czy miałeś kiedyś styczność z programami do notatek ale na dzień dzisiejszy są one czymś więcej niż notatnikiem.

Nie jestem pewien czy proszenie o recenzję 100-linijkowych projektów to dobry pomysł.

0

@spartanPAGE Jak będę w domu, to wrzucę screeny. Co do tego czy widziałem program do notatek, to pisałem ten program wzorując się trochę na pewnej aplikacji na Androida do takich notatek. Co też miałeś na myśli z pierwszym punktem? To, że komentarzy do kodu nie dodałem? W każdym razie, dzięki za uwagi.

3

Hmm... nie wiem jak w C++, bo to już jednak trochę dla mnie przeszłość ale zauważa się takie napakowanie wszystkiego do klasy MainWindow. W zasadzie wszystko wrzucone jest do jednej tzw. god class i o ile w tak małym projekcie nie ma problemu to w dużych to się naprawdę mocno mści. Wiem z autopsji.

Można by oddelegować jakąś klasę do obsługi plików, jakąś jeszcze inną np. do kolorowania składni etc... Miałbyś takie moduły, które mógłbyś dopisywać :)

0

@grzesiek51114: Jak by można było rozplanować takie dodatkowe klasy? Użyć jednego obiektu klasy do wczytywania plików, innego obiektu do zapisu, gdzie podawałoby się np. nazwę notatki i jej treść? O to chodzi?
@spartanPAGE: Dodałem screen.
Dzięki za uwagi. W wolnej chwili wprowadzę te zmiany :)

0

Wyobraź sobie co byś zrobił gdybyś musiał np. szybko zmienić widok i podłączyć do niego całe zarządzanie danymi. Zwyczajnie masz zrobić inne GUI, a wszystko inne ma działać tak jak teraz.

0

@grzesiek51114: Aha, czyli nie zmieniać samego mechanizmu działania programu, tylko zrobić inny interfejs graficzny?

1

Przykład: dostarcz widokowi np.: jeno listę notatek, a cała reszta niech się dzieje pod spodem.
Chodzi o to żeby dostarczyć jedynie "interfejsy" dla widoku. Nie implementować logiki w widoku, tak jak masz teraz, a korzystać z "interfejsów" dostarczanych przez klasy realizujące logikę. Enkapsulacja logiki "biznesowej" generalnie.

Interfejsy czyli np. metody publiczne.

0

@grzesiek51114: Czyli po prostu zrobić to tak, że np. wczytywanie nazw plików do listy zrobić w jednej metodzie klasy, a w drugiej metodzie zrobić wczytywanie danych z listy z nazwami plików do graficznej listy widocznej dla użytkownika?

0

Widok odpytuje moduł o listę plików po czym ten moduł ową listę dostarcza. Tak jak mówię: nie wiem za bardzo jak coś takiego robi się w C++ i jakie ma do tego narzędzia np. QtCreator itp. ale generalnie podziel projekt na coś co można nazwać takimi: units of work. @kq pomusz i podpowiedz, bo ja się też nawet chętnie dowiem: da się dla Qt zrobić coś a'la MVC? Są do tego narzędzia czy trzeba rzeźbić samodzielnie?

PS: @amb00: rzeźbienie samodzielne w sumie Ci się przyda, bo separacji logiki od widoku się przy okazji nauczysz :)

0

@grzesiek51114: Rozumiem, czyli po prostu zrobić to o czym wspominał mi ktoś inny w tamtym projekcie: https://4programmers.net/Forum/Off-Topic/Oceny_i_recenzje/290184-program_do_znajdowania_hashtagow_na_stronach_internetowych

1

TL;DR

  • wyszukiwanie?
  • Markdown?
  • eksport / import?
0

Dobrze by było gdybyś nauczył się programować obiektowo. Teraz ten program to taki koszmarek z jedną klasą od wszystkiego. Poza tym przydałoby się więcej opcji - import/eksport, wyszukiwanie, markdown

https://helion.pl/ksiazki/myslenie-obiektowe-w-programowaniu-wydanie-iv-matt-weisfeld,myobp4.htm#format/e

0

@Haskell: Jeśli dobrze zrozumiałem to co napisał @grzesiek51114, to chyba by wystarczyło dać logikę do osobnych metod głównej klasy. A jeśli nie, to jak taki program rozbić na inne klasy? Bo jeśli chodzi ogólnie o moje programowanie obiektowe, to robiłem programy rozbite na klasy np. prostą bazę danych, gdzie tabele były dynamicznymi tablicami obiektów danej klasy. O ile wiem jak oddzielić logikę od GUI robiąc dodatkowe metody, o tyle nie mam pomysłu jak w przypadku tego programu zrobić podział na większą ilość klas.

0

@spartanPAGE: @vpiotr: To jak w końcu lepiej oddzielić logikę od GUI? Dać ją do osobnej klasy czy do osobnych metod klasy MainWindow?

1

Najlepiej poczytać o MVC/MVVM/MV* i się zastosować.

2
amb00 napisał(a):

@spartanPAGE: @vpiotr: To jak w końcu lepiej oddzielić logikę od GUI? Dać ją do osobnej klasy czy do osobnych metod klasy MainWindow?

Poczytaj o SOLID.
No i może o OTTRTA.
Staraj się aby obsługa zdarzeń była jak najlżejsza, resztę zadań przenoś do klas pomocniczych.

0

@vpiotr @spartanPAGE @Haskell @grzesiek51114 Wydzieliłem logikę do osobnej klasy. Dobrze teraz jest? Czy w slotach powinno być mniej kodu? https://github.com/arkadiusz97/VfNotes

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