Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

10 Stron V   1 2 3 > »   
Closed TopicStart new topic
> Kod doskonały vs rzeczywistość
Omenomn
post 4.01.2017, 21:15:08
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Cześć, programuję w php, js, html, css, czyli taki standard jeżeli chodzi o strony www, frameworki to: laravel, vue.js, materializecss, może niektórzy mnie kojarzą po nicku.

Spotykam się czasem podczas pisania aplikacji z tym, że w pewnym momencie np. w połowie prac, uświadamiam sobie, że kod jest bardziej zawile napisany niż mógłbym być.
Załóżmy, że chciałem zastosować do kilku funkcjonalności tą samą część kodu i teraz okazuje się, że, aby tą część wykorzystać, komplikuję sobie świeżo pisane rzeczy, żeby je dostosować do tego co już mam. Teraz przyszło mi na myśl, czy aż tak ważne jest to, aby nie powielać kodu, bo w sumie kierując się taką genezą, wszystko mam (tak mi się wydaje) napisane bardziej zawile, ostatecznie tylko po to, żeby wykorzystać istniejące elementy i dostosować do nich nowe.
Przeważnie znajdują się jakieś mini różnice w poszczególnych funkcjonalnościach, które po zsumowaniu robią o wiele większy bałagan niż jakby napisać dla każdej funkcjonalności oddzielnie ten "uniwersalny kod".
Dodatkowo, jeśli teraz chciałbym zmienić rzeczy, które są używane w kilkunastu miejscach, to te kilkanaście miejsc przestaje działać z automatu i muszę je wszystkie poprawiać.
Nie wiem, czy przedstawienie sprawy w tak ogólny i teoretyczny sposób pozwoli Wam się odnieść do tematu, jeśli nie to podam jakiś przykład.

Druga rzecz, to np. 5 lub więcej rozwiązań jednego problemu, gdzie większość wydaje się być niezła.
Jak podejmujecie decyzje, czy na szybko, czy jakoś bardziej analizujecie, bo mi schodzi trochę czasu na takie analizy i jest to dość irytujące?

Mam w sobie jakąś taką cechę, że strasznie drażni mnie jak zaczyna się robić bałagan i zależy mi bardzo na prostocie i przejrzystości tego co piszę, zarówno od strony użytkownika jak i programisty, chciałbym, żeby to co piszę było idealne i jak mi się nie udaje to mam nerwy.

Czy macie podobne problemy, jeśli tak, jak sobie z nimi radzicie?

Może to kwestia doświadczenia, programuję zawodowo już praktycznie 2 lata, więc trochę doświadczenia nabrałem, ale to jednak nie 10 lat:p
Próbuję sobie wytworzyć jakieś standardy i rozwiązania powtarzalnych problemów, czyli np. stosować jeden lub dwa typy formularzy we froncie, na upload filmów mieć jeden sprawdzony sposób po stronie użytkownika i serwera, usuwanie zasobów też działające w konkretny sposób do wielokrotnego stosowania.

Tylko teraz pytanie się pojawia, czy chcąc budować taką swoją bazę rozwiązań nie zostanę w tyle, przez to, że nie zapoznaję się z innymi narzędziami, a pracuję cały czas na tych samych, oczywiście aktualnych wersjach.

Co sądzicie?

Go to the top of the page
+Quote Post
mrc
post 4.01.2017, 21:44:46
Post #2





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Stosuj dziedziczenie, kompozycję, SOLID i wzorce projektowe. Pisz małe funkcje, zamykaj je w klasach które mają pojedynczą odpowiedzialność. Pisz testy jednostkowe/integracyjne.

Polecam Ci przeczytać (i podumać nad) Clean Code. Jak zaczniesz ogarniać wzorce, i zobaczysz po co tak na prawdę jest singleton czy factory, oraz jakie niebezpieczeństwa się z tym niosą, to zaczniesz pisać ładniej.


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 4.01.2017, 22:06:07
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Mrc, używam frameworka (Laravel), tam pewna stylistyka pisania jest już narzucona i pewne wzorce są wykorzystywane.
Czytałem kiedyś o różnych wzorcach i robiłem różne przykłady, ale korzystając z frameworka, mam to gotowe, więc się zapomina siłą rzeczy.
Na jakich frameworkah pracowałeś i ile czasu, jeśli można wiedzieć?

Mam na swoim koncie kilka większych aplikacji.
Półtora roku doświadczenia w pracy z Laravel, więc to nie tego typu problemy, żeby stosować obiektowe programowanie tongue.gif

Mimo to dzięki za odpowiedź.

Może na przykładzie:
Mam multiformularze w większości widoków zasobów.
Formularz jest generowany vue.jsem.
Lista zasobów tak samo, więc dane dla listy muszą być w jsonie.
Natomiast dane z formularza mogę przesłać w jednym polu w jsonie, albo normalnie, albo połączyć obie metody, wszystko zależy od rodzaju zasobu.
Jeśli mam dane tekstowe tylko, to json jest okej, nawet kiedy mam obraz do przesłania to html 5 również umożliwia przesłanie go jsonem, ale co np. kiedy chcę przesłać pdf, lub film, wtedy muszę przy wybraniu pliku, przesłać go do tymczasowego folderu ajaxem, najlepiej wyświetlić go w formularzu i jeszcze dodać opcję usunięcia i wybrania ponownie pliku, tak dla każdej pozycji w formularzu, bo jak wspomniałem są to multiformularze.
Już w tym momencie jest kilka możliwości rozwiązania tych zagadnień i załóżmy, że upload jest wykorzystywany w kilku miejscach. Zgodnie z zasadą niepowielania kodu dobrze byłoby stworzyć narzędzie (metody, widok w vue.js) do uploadu filmików i obrazów, ale później przychodzi kolejna funkcjonalność: upload kilku obrazów na raz i to po przez upuszczenie, a nie tylko wybór plików standardowy i co, modyfikować to co mamy, pod następną funkcjonalność komplikując sobie jeszcze bardziej to co i tak już dość zawiłe przez to, że obsługuje i filmy i obrazy?

Cytat
pojedyncza odpowiedzialność
to jest chyba słowo klucz



Ten post edytował Omenomn 4.01.2017, 22:43:40
Go to the top of the page
+Quote Post
mrc
post 4.01.2017, 22:14:57
Post #4





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


2 lata Zend (edit), 2 lata Kohana, rok Symfony i 3 miesiące Laravel. Framework nie jest tak ważny. Własną logikę biznesową budujesz w każdym fw. Jeżeli jej nie budujesz, to znaczy że robisz to źle. Co do wzorców, pamiętaj że np. samo stworzenie jednolinijkowej statycznej funkcji factory() nie powoduje jeszcze, że tworzysz fabrykę (dobrą fabrykę). Niestety, nawet popularne frameworki czy biblioteki mają sporo takich udziwnień.


--Edit--

Przepatrzyłem swój profil na LinkedIn. Dwa lata zenda poproszę.

Ten post edytował mrc 4.01.2017, 22:21:38


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 4.01.2017, 22:49:52
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Zenda nie znam, na Kohanie niestety, albo stety dane mi było pracować chwilę, przynajmniej wiem jaka jest kiepska tongue.gif, jak CodeIgniter lub gorzej tongue.gif
Rok Symfony i 3 miesiące Laravel można porównać do mojego półtora roku na Laravel.

Odnośnie tego, że framework nie jest tak ważny nie zgodzę się, wystarczy porównać Kohanę lub CodeIgnitera z Laravelem, albo Symfony - zupełnie inny poziom pisania, choćby przez composera i artisana w laravel, ale to inny temat.

Ten post edytował Omenomn 4.01.2017, 22:52:02
Go to the top of the page
+Quote Post
mrc
post 4.01.2017, 22:57:06
Post #6





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Nie ma co porównywać doświadczeń. Moje doświadczenia są takie, że wszędzie jest jakaś logika biznesowa, o którą trzeba dbać - pisać testy, refactorować itp. Jeżeli rozmieszczasz wszystko w akcjach i klasach modelowych, to współczuję. Wtedy nie masz logiki.


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 4.01.2017, 23:18:54
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Umieszczam kod w miejscach uzależnionych od potrzeb, ale w ogromnej przewadze są to jednak kontrolery i modele, używam zdarzeń, middlewarów, jobsów praktycznie nigdy, bo są rzadko potrzebne, walidacji w requestach, jednak request nie zwróci mi obiektu z danymi jakie dostał plus z tablicą z errorami, dlatego mam to w kontrolerach w ostatnich projektach.
Oprócz tego są przecież widoki, tłumaczenia, są configi, migracje, seedy, to wszystko też się składa na logikę aplikacji, jest storage ogarniający pliki, composer, artisan...

Moje rozterki nie są raczej banalne, ale rzeczywiście ta pojedyncza odpowiedzialność w metodach u mnie rzeczywiście trochę na bakier, muszę nad tym popracować.

Go to the top of the page
+Quote Post
mrc
post 5.01.2017, 06:54:55
Post #8





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Stosuj wyżej podane techniki, a na pewno polepszy się Twój ogólny proces programowania. Do tego staraj się nazywać zmienne lepiej, nie komentuj rzeczy, które w oczywisty sposób wychodzą z kodu. W ogóle, to wszystko co mówię - to jest napisane w Clean Code. Ta książka zmieniła moje postrzeganie kodu, odkąd ją zrozumiałem (!= przeczytałem) nie mam problemów z czytelnością kodu.


--------------------
Go to the top of the page
+Quote Post
ZenekN
post 5.01.2017, 08:14:15
Post #9





Grupa: Zarejestrowani
Postów: 418
Pomógł: 5
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


dzięki za informację
Cytat


dochodzi do tego jeszcze odpoczynek (dużo odpoczynku)
Go to the top of the page
+Quote Post
mrc
post 5.01.2017, 08:27:46
Post #10





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


+1 ZenekN

Do odpoczynku dochodzi uprawianie sportu, życie poza komputerem, wychodzenie z domu i wiele innych, które sprawiają że jesteś świeży.


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 5.01.2017, 09:50:41
Post #11





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Okej mrc, zastanawia mnie tylko dlaczego wychodzisz z założenia, że ich nie stosuję, przynajmniej zdecydowanej większości.
Go to the top of the page
+Quote Post
mrc
post 5.01.2017, 09:53:35
Post #12





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Bo te techniki zapobiegają problemom z nieczytelnym i skomplikowanym kodem - a Ty z tym masz problem. Ok, może źle mówię, może stosujesz (tego nie wiem) - ale coś w takim razie idzie Ci z tym nie tak jak potrzeba.


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 5.01.2017, 10:18:10
Post #13





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Sądzę, że większość programistów ma z tym problem nie tylko Ja, są tego może mniej świadomi, miałem do czynienia z kodem różnych ludzi, nawet z większym doświadczeniem od siebie i to chyba oczywiste, nie był idealny.

Dobra ogarnę książkę o czystym kodzie, ale wątpię, że będzie do zastosowania z niej wiele rzeczy na frameworku, obym się mylił, zobaczymy.

Ten post edytował Omenomn 5.01.2017, 11:07:40
Go to the top of the page
+Quote Post
ZenekN
post 5.01.2017, 11:26:49
Post #14





Grupa: Zarejestrowani
Postów: 418
Pomógł: 5
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Ogólnie mam podobny problem ale chyba dlatego że jestem dość roztargniony i nie podchodzę do tematu tak jak potrzeba.

Prosta odpowiedź
Cytat
Doświadczenie + nauka = doskonałość kodu


Miałem problem o którym pisałem na forum (jestem samoukiem) zleciłem projekt dobremu programiście na początku byłem zachwycony tym człowiekiem myślałem że jest świetnym programistą.
Tylko pamiętam ciągle słowa "Nie będę ciągle wprowadzał poprawek" czyli że coś było ciągle ze mną nie tak,

Po kilku latach nauki z mojej strony kiedy już znacznie rozumiem wzorce

A wystarczyło wprowadzić prawidłowo relacje w bazie danych np.(n:n) i voila problem rozwiązany.


Czyli tak jak autor wyżej napisał wracajmy do wzorców i analizujmy je krok po kroku

Ten post edytował ZenekN 5.01.2017, 11:52:15
Go to the top of the page
+Quote Post
nospor
post 5.01.2017, 11:30:28
Post #15





Grupa: Moderatorzy
Postów: 36 447
Pomógł: 6292
Dołączył: 27.12.2004




@mrc mowisz o tej ksiazce?
http://ricardogeek.com/docs/clean_code.pdf


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mrc
post 5.01.2017, 11:40:39
Post #16





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


@nospor

Tak, ta książka. Osobiście, wolę drukowaną wersję smile.gif I niebiesko-czarną okładkę tongue.gif


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 5.01.2017, 17:37:11
Post #17





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Teraz mam np. problem tego typu, że w systemie, nad którym pracuję, jest kilka zasobów wykorzystujących obrazy i filmy.
Przykładowo:
1. Slider
- upload filmów z wyborem miniaturki z filmu,
- obrazy również z miniaturkami.
2. Galeria
- obrazy z miniaturkami.
3. Klipy
- upload filmów z wyborem miniaturki z filmu,

Zrobiłem to na zasadzie takiej, że każdy zasób, nazwy swoich plików przechowuje we wlasnej tabeli i teraz zastanawiam się, czy nie było by lepiej zrobić dla każdego rodzaju pliku oddzielną tabelę, a w tabelach zasobów przechowywać tylko referencje, wtedy miałbym tylko jeden model od filmów i nie musiałbym ogarniać obsługi plików filmów w sensie uploadu, czy usuwania w kilku miejscach.
Natomiast minus jest taki, że przy wprowadzeniu np. 10 slidów jednocześnie, najpierw muszę dodać filmy do tabeli z filmami, obrazy do tabeli z obrazami, później dopiero wprowadzać same slidy z odpowiednimi referencjami.

questionmark.gif

Ten post edytował Omenomn 5.01.2017, 17:42:39
Go to the top of the page
+Quote Post
vokiel
post 5.01.2017, 23:06:19
Post #18





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Nie jest trochę tak, że szukasz rozwiązania na problemy implementacyjne?

Przykłady, które podałeś nie są raczej przypadkami natury warsztatu, architektury etc. Tylko bardziej szukanie rozwiązań konkretnych zagadnień, a tych w programowaniu może być bardzo dużo. Przy tym wiele z nich będzie poprawnych, nie będzie jednego najlepszego.

Ten post edytował vokiel 5.01.2017, 23:06:59


--------------------
Go to the top of the page
+Quote Post
Omenomn
post 6.01.2017, 09:58:30
Post #19





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 4.02.2014

Ostrzeżenie: (20%)
X----


Właśnie o to mi chodzi, że to moje problemy nie dotyczą tylko warsztatu, a sięgają trochę głębiej, niemniej jednak pozycja http://helion.pl/ksiazki/czysty-kod-podrec...rtin,czykov.htm sądzę, że się przyda i odświeżenie sobie wzorców też.

Pracując na frameworku całą strukturę mam gotową praktycznie. Korzystam z wzorców, nie tworząc ich, przez co zapominam jak działają.
Kiedyś uczyłem się o wzorcach analizując dokładnie przykłady z książki, a na dzień dzisiejszy ta wiedza jakby wyparowała ohmy.gif.
Wychodzi na to, że ta na nauka, była stylu, zakuć, zdać, zapomnieć, a nie cierpię się tak uczyć.
Wiele bardziej wolę zapamiętywać w trakcie używania.

http://helion.pl/ksiazki/php-wzorce-projek...ders,phpwzo.htm

Ten tytuł sobie również przestudiuję, zobaczymy co przyniesie.

Ten post edytował Omenomn 6.01.2017, 10:09:01
Go to the top of the page
+Quote Post
mrc
post 6.01.2017, 10:59:16
Post #20





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Omenomn może ucz się tak: dowiedz się, czym jest fasada, i zacznij w swoim projekcie (projektach) szukać miejsca, gdzie fasadę można wstawić. Rób refactory i wstawiaj fasady. Później poczytaj czym są fabryki i zastanów się, gdzie u siebie możesz takie fabryki wstawiać.

Oczywiście, do tego trzeba mieć logikę biznesową - zestawy klas które realizują algorytmy, połączenia z bazą czy innymi elementami jak np. curl, guzzle, websockety, systemy kolejkowe.


--------------------
Go to the top of the page
+Quote Post

10 Stron V   1 2 3 > » 
Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 02:44