Witam. Na wstępie chcę powiedzieć, że głównie chodzi mi o styl pisania takiej aplikacji i chciałbym usłyszeć główne zarzuty co do dotychczasowego kodu, aczkolwiek drobniejsze jakieś usterki, dziwactwa proszę również uwzględnić. Uprzedzam też o tym, że nie musisz tego sprawdzać jak ci się nie chcę, szukam kogoś kto miałby wolną chwilkę, bo dla Was ekspertów to 5 min, przeczytać ten opis, spojrzeć na kod i ocenić jego "poprawność".
No to do rzeczy. Od jakiegoś miesiąca zacząłem pisać komunikator (na razie serwer, na klienta przyjdzie czas oczywiście). Nie mogłem wymyślić nic innego, więc postanowiłem właśnie komunikator, dobre ćwiczenie na wielowątkowość, komunikacja sieciowa, bazy danych i przeróżne inności. Jestem na takim etapie, że przydałoby się przemyśleć jak takie działanie serwera ma wyglądać, żeby było szybko, z możliwością ciągłego rozwijania i ładny kod. Na razie wygląda to tak:
- główny wątek - inicjalizacja, łączenie z bazą, itd.
- wątek nasłuchiwania - nasłuchuje, jak jest nowy klient to go obsługuje: przyłącza tymczasowo; odbiera żądanie; wykonuje żądanie lub nie
- wątek "pracy" - na razie tylko przelatuje wszystkich klientów online (tych przyłączonych do listy) i odbiera od nich żądania
- lista klientów - przechowuje klientów online
- klasa Account - odpowiedzialna za tworzenie kont, sprawdzanie itd.
- klasa Utils - logi, obsługa bazy i inne
- statyczna klasa Cmd - zawiera komendy swoje i klienta
Prócz tego zasada działania metod z różnych klas jest taka, że każda metoda zwraca mój enumError
. Jest kilka stanów, w zależności od metody np. ta od tworzenia konta zwraca: ServerError (to w sumie każda zwraca, bo zawsze jakieś ryzyko błędu innego jest), AccountExists (nie można stworzyć II konta o takim samym loginie, [błąd bazy]), NoError (też prawie każda zwraca, gdy wszystko ok, czyli konto utworzone). Przy wywołaniu takiej metody mam switch'a i w zależności od wyniku wykonuje różne operacje.
Tyle opisu. Załączam w całości kod. Wiem, że opis duży, kodu w sumie nie wiele ~560 linii odjąć jak wiadomo usingi i wolne linie dla czytelnego kodu. Jeżeli ktoś na prawdę by miał czas popatrzeć na to, nie mówię już o dogłębnej analizie, tylko spojrzeć czy dobrze myślę i czy w pracy by mnie za taki kod nie wywalili :)
Miałem wrzucić do "Oceny i recenzje", ale chyba się nie nadaje, bo to nie gotowy projekt, jak to można nazwać. Ogólnie to pierwsza rzecz, którą chcę bardzo porządnie napisać i zapamiętać sobie czy nawet wejść w nawyk pisania dobrego takiej np. aplikacji. Wiem, że sposobów jest setka, ale każde są do siebie w jakiś sposób podobne. Proszę więc o pomoc i cenne wskazówki szanowni koledzy :) I tak na koniec, niech każdy powie ile facepalm'ów zaliczył czytając kod :D Na prawdę, możecie się śmiać, jak zaczynałem miałem tylko mniej-więcej pomysł jak napisać ogólnie, ale żeby tak fachowo i poprawnie to nie, bo nie wiem jak to się robi, właśnie piszę, żeby się dowiedzieć. Acha, no i kod jest otulony niezbędnymi komentarzami.
-- Kod --
http://xeosite.yoyo.pl/Download/XMServer.zip
Kurczę, dlaczego nie można zrobić drzewka z punktatorów? Jak dam niżej to jaja są totalne, a jak dam samo "-", to jest pusta linia przed właściwym punktem..