Framework vs. čistý kód

Re:Framework vs. čistý kód
« Odpověď #75 kdy: 29. 07. 2025, 00:40:00 »
Mě by v práci nenapadlo nepoužít framework, používám Spring a na FE React, ale doma momentálně laboruju s Python Bottle a Server side redneringem. A člověk by ani neřekl, kolik se toho v tom dá udělat, ale problém spočívá v podpoře v IDE, která je katastrofická - a nejde ani tak o Python část zdrojáků, tam framework nepotřebuju, ale jde o ty jeho templates.

Takže Bottle podporu pro svoje templates vůbec nemá, pak je tam Mako templates - tyhle byly velice oblíbené ale JetBrains dropnul podporu už v roce 2021. Teď je tam tiket v jejich systému, má podporu 80 likes aby vrátili zpatky podporu pro ty Mako templates, ale smůla, už několik let tam podpora není.

Pak je tam Jinja template, to tam plugin má a momentálně je používám, ale je to katastrofa, nedokáže to propojit vstupní parametry s těmi co jsou v templatu, ani to neumí propojit volání fragmentu, nejen že to nenašeptá parametry, ale nepropojí to ani metodu. Hrůza je to. Už jsem v tom naprogramoval kus aplikace a asi to vzdám a přepíšu to do něčeho jiného.

A zdůrazňuju, že to není kvůli tomu mikro frameworku samotnému, ale je to kvůli podpoře v IDE. Bez ní se to prostě nedá.

Dobrou podporu v IDE má Django, ale mám k tomu frameworku nějaký odpor, pokaždé jak vidím ty jejich tzv. "batteries" included, tak mě to odradí, dávají tam řadu věcí, které nepotřebuju. Dokonce i svoje ORM namísto SQL Alchemy - kdoví, jaká úskalí to skýtá.

Nejlepší Keep it simple "template" je to, co má PHP, ASP, nebo co měly staré JSP a nebo právě to, co měly Mako templates nebo co má Python Bottle - a ty nejlepší "templates" jsou ty, kde se píše přímo kód. To jsou IMO nejlepší templates. Hlupáci to historicky zarazili, protože v tom lidi prasili, ale v roce 2025 se všude používá React a to je defacto v pricnipu právě to, co byly JSP nebo PHP, prostě kód a html jsou dohromady.

Bohužel, vždycky když je něco dobrý způsob který funguje, tak musí přijít nějaký dbl, který to zničí a zkomplikuje. Aby to náááhodou nebylo potom, pro ostatní až moc jednoduché.
Bottle je super, rád čtu že ho nepoužívám sám. Podpora šablon v idečku je možná horší, dá se s tím ale žít. Na malé věci osobně používám bottle, na velké django a na obojí nedám dopustit.


Re:Framework vs. čistý kód
« Odpověď #76 kdy: 29. 07. 2025, 00:42:48 »
A zdůrazňuju, že to není kvůli tomu mikro frameworku samotnému, ale je to kvůli podpoře v IDE. Bez ní se to prostě nedá.

Podporu frameworků v IDE raději vůbec nehledám. Možná i proto mi připadají takové těžkopádné. Pro mne jednodušší připojit vlastní knihovnu tříd které se snažím udržovat stylem KISS.
Tak kolega tady spíš narážel na problém v podpoře šablon, to ani nepoužívání frameworku nezachrání..

Kit

  • *****
  • 836
    • Zobrazit profil
    • E-mail
Re:Framework vs. čistý kód
« Odpověď #77 kdy: 29. 07. 2025, 05:13:07 »
A zdůrazňuju, že to není kvůli tomu mikro frameworku samotnému, ale je to kvůli podpoře v IDE. Bez ní se to prostě nedá.

Podporu frameworků v IDE raději vůbec nehledám. Možná i proto mi připadají takové těžkopádné. Pro mne jednodušší připojit vlastní knihovnu tříd které se snažím udržovat stylem KISS.
Tak kolega tady spíš narážel na problém v podpoře šablon, to ani nepoužívání frameworku nezachrání..

K čemu by mi byla podpora šablon, když těch šablonovacích systémů jsou mraky a podporovány jsou jen některé? Pro mne je důležitá podpora samotného jazyka. Můj šablonovací systém je však podporován také.

Re:Framework vs. čistý kód
« Odpověď #78 kdy: 29. 07. 2025, 06:26:33 »
Kit, ty jsi jak tajemný hrad v karpatech. Neděláš náhodou v PHP?
Od roku 2005 se zabývám SW Vývojem, načež od roku 2015 je to i mé povolání. Specializuji se na Javu, a v posledních letech i na Python a intranetové aplikace v Reactu. Delám v AWS Cloudu.

Kit

  • *****
  • 836
    • Zobrazit profil
    • E-mail
Re:Framework vs. čistý kód
« Odpověď #79 kdy: 29. 07. 2025, 06:34:30 »
Kit, ty jsi jak tajemný hrad v karpatech. Neděláš náhodou v PHP?

To se tady přece ví, že dělám v PHP.


Re:Framework vs. čistý kód
« Odpověď #80 kdy: 29. 07. 2025, 07:40:10 »
No ale to v tom případě my o voze a ty o koze... V PHP Framework nepotřebuješ nutně mít, na to jsme přišel taky. PHP je snad jediný jazyk do dneška, co už ve vanilce je dělaný ve stylu JSP nebo ASP, nebo JS + HTML, tzn. že PHP kód se dá psát přímo do HTML "templatu" (Jestli se tomu teda vůbec dá říkat template).

A PHP za těch 30 let má naprosto skvělou podporu ve WebStorm, funguje plně refaktoring všeho. A ten refaktoring všeho funguje i díky tomu, že to není jen nějaký zasr* template jako Thymeleaf nebo Jinja nebo Django, ale že je to 1:1 převeditelné na kód. V JSP taky pokud vím fungoval refaktoring, než tam přidali ty tagy.

PHP je do dnešních dnů snad jediná webová technologie, která se drží a je pro ní plný refaktoring. Ikdyž teď přišly nové technologie, v Javě je to JTE, a v .NET myslím že se to jmenuje Blazor, kterými se navrátilo psaní kódu přímo do "templates", jako to bylo za dob JSP.

PHP to tak má už 30 let.

Někdy uvažuju, že bych můj projekt předělal do PHP, ale další jazyk na naučení už nedám, protože už dělám v Javě, Pythonu a JS.
Od roku 2005 se zabývám SW Vývojem, načež od roku 2015 je to i mé povolání. Specializuji se na Javu, a v posledních letech i na Python a intranetové aplikace v Reactu. Delám v AWS Cloudu.

Re:Framework vs. čistý kód
« Odpověď #81 kdy: 29. 07. 2025, 07:46:57 »
Akorát jedna věc, co mi vadí na PHP, je že když chci udělat komponentu, tak k ní chci přistupovat jako k funkci, tzn. žebere na vstup nějaké parametry a něco vrací.

Pokud to udělám pomocí include, tak nemám našptání vstupních paremtrů. A pokud si udělám svoji funkci a budu volat tu funkci, tak mi v PHP chybí nějaká pěkná podpora pro multiline html stringy ve stylu JSX. Takže to potom vypadá takto (z DokuWiki)

Kód: [Vybrat]
    public static function fatalException($e)
    {
        $plugin = self::guessPlugin($e);
        $title = hsc(get_class($e) . ': ' . $e->getMessage());
        $msg = 'An unforeseen error has occured. This is most likely a bug somewhere.';
        if ($plugin) $msg .= ' It might be a problem in the ' . $plugin . ' plugin.';
        $logged = self::logException($e)
            ? 'More info has been written to the DokuWiki error log.'
            : $e->getFile() . ':' . $e->getLine();

        echo <<<EOT
<!DOCTYPE html>
<html>
<head><title>$title</title></head>
<body style="font-family: Arial, sans-serif">
    <div style="width:60%; margin: auto; background-color: #fcc;
                border: 1px solid #faa; padding: 0.5em 1em;">
        <h1 style="font-size: 120%">$title</h1>
        <p>$msg</p>
        <p>$logged</p>
    </div>
</body>
</html>
EOT;
    }

To má 2 problémy:

1. Nevypadá to tak pěkně jako JSX v Reactu
2. Nedají se do toho psát pěkně další foreache atd

Dá se to však obejít a udělat toto:

Kód: [Vybrat]
    function renderUserList($users) {
        ob_start();
        ?>
        <ul>
            <?php foreach ($users as $user): ?>
                <li><?= htmlspecialchars($user['name']) ?></li>
            <?php endforeach; ?>
        </ul>
        <?php
        
return ob_get_clean();
    }

A tohle už je docela hustý, ikdyž mi tochu vadí ten ob_clean. Dá se to dát úplně pryč a udělat jen:

Kód: [Vybrat]

    function renderUserList($users) {
        ?>
        <ul>
            <?php foreach ($users as $user): ?>
                <li><?= htmlspecialchars($user['name']) ?></li>
            <?php endforeach; ?>
        </ul>
        <?php
    
}


Ale z toho se mi trochu chcou zbláznit barvy v IDE (to bych asi pořešil) ale není tam ta výhoda toho return. Ale možná to ničemu nevadí?
« Poslední změna: 29. 07. 2025, 07:53:38 od registrovany123 »
Od roku 2005 se zabývám SW Vývojem, načež od roku 2015 je to i mé povolání. Specializuji se na Javu, a v posledních letech i na Python a intranetové aplikace v Reactu. Delám v AWS Cloudu.

Kit

  • *****
  • 836
    • Zobrazit profil
    • E-mail
Re:Framework vs. čistý kód
« Odpověď #82 kdy: 29. 07. 2025, 08:11:36 »
No ale to v tom případě my o voze a ty o koze... V PHP Framework nepotřebuješ nutně mít, na to jsme přišel taky. PHP je snad jediný jazyk do dneška, co už ve vanilce je dělaný ve stylu JSP nebo ASP, nebo JS + HTML, tzn. že PHP kód se dá psát přímo do HTML "templatu" (Jestli se tomu teda vůbec dá říkat template).

Bavíme se obecně o všech jazycích. Vkládání PHP do šablony HTML nepoužívám, všechno dělám přes OOP. Nepoužívám ani koncovou značku ?>.

Re:Framework vs. čistý kód
« Odpověď #83 kdy: 29. 07. 2025, 08:16:39 »
Tohle uděláš jak?

Kód: [Vybrat]
<?php foreach ($users as $user): ?>
    <?php if ($user === 'Bob'): ?>
        <li><strong><?= $user ?></strong></li>
    <?php else: ?>
        <li><?= $user ?></li>
    <?php endif; ?>
<?php endforeach; ?>

To mi chceš říct, že jsi to "podělal", a na PHP, které má skvělou podporu v IDE pro refaktoring všeho, tak jsi tam úplně zbytečně dal šablonovací systém typu Thymeleaf, který má vymyšlené svoje tagy? Takže se to v IDE opět rozbije a nebude nad tím fungovat IntelliSense?
Od roku 2005 se zabývám SW Vývojem, načež od roku 2015 je to i mé povolání. Specializuji se na Javu, a v posledních letech i na Python a intranetové aplikace v Reactu. Delám v AWS Cloudu.

Kit

  • *****
  • 836
    • Zobrazit profil
    • E-mail
Re:Framework vs. čistý kód
« Odpověď #84 kdy: 29. 07. 2025, 08:28:06 »
Akorát jedna věc, co mi vadí na PHP, je že když chci udělat komponentu, tak k ní chci přistupovat jako k funkci, tzn. žebere na vstup nějaké parametry a něco vrací.

Pokud to udělám pomocí include, tak nemám našptání vstupních paremtrů. A pokud si udělám svoji funkci a budu volat tu funkci, tak mi v PHP chybí nějaká pěkná podpora pro multiline html stringy ve stylu JSX. Takže to potom vypadá takto (z DokuWiki)

Heredoc jsem kdysi používal. Dnes ti kdejaký vývojář řekne, že je to fuj. Vlastně ho stále používám pro delší SQL dotazy. Pro účel generování HTML jsem ho opustil, protože neumí ohlídat párovost HTML značek a také kvůli zmíněnému odsazení. V Pythonu se však běžně používá.

Output buffering nepoužívám, for nebo foreach v šablonách také ne.


Re:Framework vs. čistý kód
« Odpověď #85 kdy: 29. 07. 2025, 08:35:48 »
To mi chceš říct, že jsi to "podělal", a na PHP, které má skvělou podporu v IDE pro refaktoring všeho, tak jsi tam úplně zbytečně dal šablonovací systém typu Thymeleaf, který má vymyšlené svoje tagy? Takže se to v IDE opět rozbije a nebude nad tím fungovat IntelliSense?
PHP má vymyšlené svoje tagy úplně stejně, jako Thymeleaf. Resp. ještě víc – Thymeleaf je navržen tak, že šablonu v Thymeleafu můžet eudělat tak, že je to pořád HTML soubour zobrazitelný v prohlížeči. To s PHP neuděláte. A IDE mají podporu pro Thymeleaf – pokud nějaké IDE podporu nemá, je to problém toho IDE.

Kit

  • *****
  • 836
    • Zobrazit profil
    • E-mail
Re:Framework vs. čistý kód
« Odpověď #86 kdy: 29. 07. 2025, 08:39:02 »
Tohle uděláš jak?

Kód: [Vybrat]
<?php foreach ($users as $user): ?>
    <?php if ($user === 'Bob'): ?>
        <li><strong><?= $user ?></strong></li>
    <?php else: ?>
        <li><?= $user ?></li>
    <?php endif; ?>
<?php endforeach; ?>

To mi chceš říct, že jsi to "podělal", a na PHP, které má skvělou podporu v IDE pro refaktoring všeho, tak jsi tam úplně zbytečně dal šablonovací systém typu Thymeleaf, který má vymyšlené svoje tagy? Takže se to v IDE opět rozbije a nebude nad tím fungovat IntelliSense?

Tohle řeším až v šabloně. Co kdybych nechtěl výstup v HTML, ale třeba v prostém textu nebo v PDF? Ty značky by mi tam překážely. Také je nutné ošetřit výstupní text.

Re:Framework vs. čistý kód
« Odpověď #87 kdy: 29. 07. 2025, 08:47:45 »
To mi chceš říct, že jsi to "podělal", a na PHP, které má skvělou podporu v IDE pro refaktoring všeho, tak jsi tam úplně zbytečně dal šablonovací systém typu Thymeleaf, který má vymyšlené svoje tagy? Takže se to v IDE opět rozbije a nebude nad tím fungovat IntelliSense?
PHP má vymyšlené svoje tagy úplně stejně, jako Thymeleaf. Resp. ještě víc – Thymeleaf je navržen tak, že šablonu v Thymeleafu můžet eudělat tak, že je to pořád HTML soubour zobrazitelný v prohlížeči. To s PHP neuděláte. A IDE mají podporu pro Thymeleaf – pokud nějaké IDE podporu nemá, je to problém toho IDE.

Jirsák, už mi řekneš co ty jsi kdy udělal za web?

Přestaň tady žvatlat ty svoje teorie a otevři si v IntelliJ Ultimate 1 projekt v PHP, 1 projekt v Thymeleaf a k tomu 1 projekt ve starých JSP, a začni refaktorovat.

Takových hlp, co říkají, že něco je problém IDE, už jsem narazil hromadu. Naposledy takoví hlupáci, co podělají Maven build nebo Gradle build, v IntelliJ to je pořád rozbité, a pak říkají, že za to může IntelliJ a ne oni.

IntelliJ je nejlepší IDE na světě, a když něco nepodporuje ani IntelliJ, tak máš smůlu.

Běž a udělel si plugin do IntelliJ, běž a naprogramuj si vlastní Lexer, Parser a ty další věci. To všechno se musí udělat. Když refactor ani v IntelliJ nefunguje spolehlivě pro Thymeleaf, tak to znamená, že to nejde udělat, aby funguoval. Refaktoring spolehlivě funguje pouze pro JSP (ty prvotní verzi bez EL) a PHP, protože je to přímo kód jazyka.
« Poslední změna: 29. 07. 2025, 08:54:16 od registrovany123 »
Od roku 2005 se zabývám SW Vývojem, načež od roku 2015 je to i mé povolání. Specializuji se na Javu, a v posledních letech i na Python a intranetové aplikace v Reactu. Delám v AWS Cloudu.

Re:Framework vs. čistý kód
« Odpověď #88 kdy: 29. 07. 2025, 09:14:17 »
A ještě refaktor zjevně funguje spolehlivě pro nejnovější Java JTE, protože rovněž je to přímo kód jazyka, jako to měly JSP  ;)

Teoretik Jirsák se z toho zblázní, až se vítr zase otočí a všem dojde, že ty prvotní JSP to dělaly dobře. Thymeleaf je i po 15 letech vývoje a nejlepší možné podpoře ze strany IDE co asi jde udělat, pořád větší shit na refaktoring, než React s Javascriptem. A to je co říct. A proč to tak je? No protože React + JS + HTML (JSX) je taky "šablona-je-kód-systém" stejně tak, jako to měly ty JSP, nebo jako to už 30 let má PHP.
Od roku 2005 se zabývám SW Vývojem, načež od roku 2015 je to i mé povolání. Specializuji se na Javu, a v posledních letech i na Python a intranetové aplikace v Reactu. Delám v AWS Cloudu.

Kit

  • *****
  • 836
    • Zobrazit profil
    • E-mail
Re:Framework vs. čistý kód
« Odpověď #89 kdy: 29. 07. 2025, 09:25:59 »
To mi chceš říct, že jsi to "podělal", a na PHP, které má skvělou podporu v IDE pro refaktoring všeho, tak jsi tam úplně zbytečně dal šablonovací systém typu Thymeleaf, který má vymyšlené svoje tagy? Takže se to v IDE opět rozbije a nebude nad tím fungovat IntelliSense?
PHP má vymyšlené svoje tagy úplně stejně, jako Thymeleaf. Resp. ještě víc – Thymeleaf je navržen tak, že šablonu v Thymeleafu můžet eudělat tak, že je to pořád HTML soubour zobrazitelný v prohlížeči. To s PHP neuděláte. A IDE mají podporu pro Thymeleaf – pokud nějaké IDE podporu nemá, je to problém toho IDE.

Jirsák, už mi řekneš co ty jsi kdy udělal za web?

Přestaň tady žvatlat ty svoje teorie a otevři si v IntelliJ Ultimate 1 projekt v PHP, 1 projekt v Thymeleaf a k tomu 1 projekt ve starých JSP, a začni refaktorovat.

Tohle nefunguje? https://www.jetbrains.com/help/idea/thymeleaf.html