![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%) ![]() ![]() |
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? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%) ![]() ![]() |
Chodzi o to, że kod ma rozwiązywać między innymi takie problemy:
- upload jakiegokolwiek pliku - upload obrazka - upload minaturki - upload obrazka z minaturką - upload wideo - upload wideo z miniaturką - upload wideo z trzema miniaturkami - plus mogą wystąpić dodatkowe rodzaje plików lub inne konfiguracje Teraz: - do operacji na plikach mam bibliotekę - do operacji na obrazach mam bibliotekę - i do operacji na filmach mam bibliotekę Wszystkie wykorzystuję w obu rozwiązanich. Zwyczajne podejście to: - Robię kontroler do uploadu plików z metodami np.: uploadVideo, uploadVideoWithThumbnail, uploadImage, uploadImageWithThumbnail i to jest okej, ale: - muszę pobierać za każdym razem atrybuty pliku: 'name' => $file->getClientOriginalName(), 'extension' => $file->getClientOriginalExtension(), 'path' => $file->getRealPath(), - muszę za każdym razem ustawiać kontent: $content = GrImage::make($path); lub $content = \File::get($file); w zależności od typu pliku - muszę kodować: $content->encode($extension); lub nie, jeżeli to video - i wreszcie wrzucić plik: if ($disk->exists($name)) $disk->delete($name); $disk->put($name, $content); Opisałem najprostszą konfigurację. Standardowym podejściem mogę wszystkie metody przechowywać w kontrolerze i w zależności od potrzeb dopisywać następne (co już jest złym podejściem, bo kod powinno się nadbudowywać, a nie zmieniać już napisany). - function putFile() - function getProperties() - function resizeToThumbnail() - function makeThumbnail() - function makeVideo() - function getThumbnailFromVideo() itd. itd... Przez to mam milion metod w kontrolerze i robi się mega bałagan. Natomiast podejście dekoracyjne wygląda tak: - zwykły obraz: $image = new Property( new ContentImage( new Image( new Encoder( new File)))); $image->make($request->file); - miniaturka: $thumbnail = new Property( new ContentImage( new Thumbnail( new Encoder( new File)))); $image->make($request->file); - video: $video = new Property( new Content( new Video( new File))); $video->make($request->file); - video z miniaturką $video = new Property( new ThumbnailFromVideo( new Content( new Video( new File)))); $video->make($request->file); - video z trzema miniaturką $video = new Property( new ThumbnailFromVideo( new GetThumbnail( new ThumbnailFromVideo( new GetThumbnail( new ThumbnailFromVideo( new GetThumbnail( new Content( new Video( new File)))); lub $video = new ThreeThumbnailsFromVideo( new Content( new Video( new File)))); $video->make($request->file); Mogę to nadbudowywać jak mi się żywnie podoba. Dodatkowo wszystkie te klasy są obserwatorami obiektu przechowującego konfigurację pliku, więc jeśli będę chciał dodać obiekt zmieniający nazwę Renamer $video = new ThreeThumbnailsFromVideo( new Content( new Video( new Renamer( new File))))); $video->make($request->file); Wtedy wszystkie obiekty dostają o tym informację (Obserwator). Ostatecznie dekorator wywołuję przez klienta, więc stworzenie miniaturki będzie wyglądało tak: use Acme\MakerClients\Thumbnail; $thumbnail = new Thumbnail; $thumbnail->make($request->file); i tak z każdą zawartością. Chyba macie zbyt sztywne podejście do wzorców, czemu mam stosować jeden, skoro mogę połączyć dwa, to jest o wiele bardziej konstruktywne i ciekawe niż trzymanie się konkretnego wzorca jak sztywnych zasad 10-ciu przykazań. Ten post edytował Omenomn 10.01.2017, 19:11:09 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.06.2025 - 02:49 |