Cytat(destroyerr @ 9.11.2014, 21:53:23 )

Gdybyś od razu napisał, że chodzi Ci o logikę biznesową czyli o model to byłoby łatwiej się dogadać. Ja osobiście staram się tworzyć aplikacje w ten sposób, że tworzę model. Potem korzystam z jakiegoś szkieletu, który pomoże mi skomunikować mój model z użytkownikiem.
Z premedytacją unikałem użycia słowa "model", ponieważ przywołuje on skojarzenia z modelami z MVC, które są mocno uproszczone i wiele osób może je skojarzyć wyłącznie ze zwykłą biblioteką ORM. Także logika biznesowa i kod operujący tą logiką to właśnie to co określam właściwą aplikacją - tj. wszystko to, co piszemy sami (można powiedzeć, że to wszystko co zaczyna się w kodzie kontrolerów).
Całym meritum sprawy o której piszę to przenośność i niezależność naszych aplikacji. Wcześniej pisałem je w taki sposób jak wszyscy, tj. uważałem framework jako
podstawę mojej aplikacji, jako serce mojego "dzieła", które było całkowicie zależne od frameworka - i przez myśl mi nawet nie przychodziły takie rzeczy jak przenośność,
niezależność. Nawet przez milisekundę nie zastanawiałem się nad pytaniem: "A co jeśli chciałbym zmienić framework, albo system ORM? Ile czasu zajęłoby mi przepisywanie
mojego kodu na nowy framework? Iloma "cienkimi niciami" moja aplikacja powiązana jest z frameworkiem?".
Ale pewnego dnia jedna osoba sprawiła, że zacząłem zastanawiać się nad tym, ogólnie nad zasadami SOLIDnego programowania. Wniosek był tylko jeden - błądzimy! ; )
Nawet najnowsza wersja jakiegokolwiek frameworka ma wsparcie na nie dłużej niż 2 lata, a aplikacje żyją często dłuuuugimi latami (osobiście spotkałem się z aplikacjami z PHP, które miały
nawet po 10 lat).
Zapominamy, że jedyną stałą w programowaniu jest "zmiana". Stary kod nie pozwala na korzystanie z nowszych parserów (no, tak nazwę interpretator PHP). Dlaczego jesteśmy tak
teraźniejsi? Dlaczego nasz wzrok sięga tak krótko w przyszłość? Często nie dalej niż termin oddania projektu. A później niech się dzieje co chce, niech klient samemu martwi się
nad tym co otrzyma - ktoś tam to przejmie, może komuś będzie chciało się przepisać kod na nowszy system...
To nie jest zbyt profesjonalne podejście. Powiedziałbym, że jest to zarodek tak zwanego "legacy code" - a z tym raczej chcemy walczyć.
Cytat(destroyerr @ 9.11.2014, 21:53:23 )

Źle kombinujesz, zaraz napiszesz, że array() to jest frameworkiem bo służy do komunikowania z użytkownikiem.
Nie no, troszkę przesadziłeś. ; )
Dobrze wiesz, że chodziło mi o kod odpowiedzialny za wejście/wyjście, za I/O. Przecież podstawowa funkcjonalność frameworków składa się właśnie z tych dwóch rzeczy.
1. Wejście - framework odczytuje i przetwarza requesta, który tak naprawdę jest zwykłym stringiem! Tak, string, łańcuch znaków. Nic więcej. Zwykły Input (I z I/O).
2. Później po przetworzeniu tego stringa szykujemy odpowiedź dla klienta (Reponse), który także jest zwykłym stringiem. Zapomnijmy o przeglądarkach, zapomnijmy o
HTML-u i różnych zasadach ładowania plików CSS, JS itd, nieważne jaką stronę tworzymy, to przeglądarka otrzymuje najzwyklejszego w świecie stringa, który tylko dzięki znakom
"\n" wygląda jakby był czymś więcej - każdą stronę da się zapisać za pomoca jednej linii (czasem dłuuugiej) łańcucha znaków.
No i co najśmieszniejsze, - odkryłem to niedawno - frameworki kryją pod sobą tak naprawdę te dwa proste punkty, jednak z zewnątrz opisują swoje działanie w taki sposób,
jakby rozwiązywały ważne problemy z fizyki jądrowej. ; )
Nie odbierz mnie źle, ja procowałem na wielu frameworkach PHP, to moja codzienna praca, siedziałem na Zendzie, Symfony, Laravelu i kilku innych frameworkach, jednak
na swojej drodze spotkałem pewnego proroka, który otworzył mi oczy i pozwolił zrozumieć, że frameworki trzymają nas niepotrzebnie za jaja.
W końcu niezależność i przenośność to ważne punkty. "Coupling" to jeden z największych wrogów kodu. A frameworki wypchane są zachętami do "Couplingu", oczy programistów
zostały tak sprytnie zamydlone, że biedni nawet nie zauważają, że wprowadzają w swoje aplikacje swojego wroga nr 1, do tego wychwalają go - a on czeka na odpowiedni moment,
aby wbić nóż w plecy. Ale gdy się to zauważy, to jest już zdecydowanie za późno.
Ogólnie polecam to świeże spojrzenie. Zachęcam do medytacji nad prostotą działania frameworków i niepotrzebnego wiązania naszych aplikacji (taaak, kreślcie grube, czerwone linie pomiędzy
frameworkami a waszym kodem, który piszecie we frameworkach - frameworki to żadne szkielety, tylko diabelsko proste mechanizmy I/O) z frameworkami.
I pytam jeszcze raz - co jest takiego nadzwyczajnego w tym, że jeśli wyśle do farmeworka stringa "http://ksiazki.pl/przegladaj/Przygody-Jasia/", to on uruchomi mi kontroler "Przeglądaj" i wyśle argument
"Przygody Jasia"?
Czy w tym kontrolerze nie powinniśmy utworzyć instancji obiektu naszej aplikacji i przesłać argumentów typu "Przygody Jasia" i "przeglądaj"? Czy nasza aplikacja nie powinna także działać niezależnie
od frameworka, tj. po wysłaniu tych dwóch argumentów z linii poleceń, bezpośrednio do kodu naszej aplikacji, nie powinna zwrócić takich samych danych jak przy użyciu frameworka? Bo to wygląda
dla mnie jak niezależna aplikacja.
A jeśli korzystamy z jakiejś biblioteki farmeworka, to nie powinniśmy utworzyć "wrapperów" (adapterów?), które służą jako interfejs i oznaczają właśnie tą linię, w której framework komunikuje się
z naszą aplikacją? Czy aplikacja powinna wiedzieć cokolwiek o frameworku i bibliotekach jakie używamy?
Odpowiedzi na powyższe pytania pozostawiam do przemyślenia.