Přejít k navigační liště

Zdroják » Různé » Podřízne Razor PHP?

Podřízne Razor PHP?

Články Různé

Možná jste zaznamenali vznik nového engine pro ASP.NET s názvem Razor (na Zdrojáku o něm vyšla zprávička. Poměrně nenásilným způsobem kombinuje HTML stránky s jazyky, používanými ve světě .NET, tedy především C# a VB.NET. Má tato kombinace šanci vystřídat PHP na postu „nejjednoduššího jazyka pro vytváření server backendu“?

Tento článek je můj subjektivní názor na novou syntaxi Razor (http://www.as­p.net/webmatrix) pro ASP.NET, který je ovlivněn patnácti lety, kdy se věnuji vzdělávání dospělých v IT, 11 lety vývoje aplikací, frustrací z jednoho projektu a samozřejmě i mou prací na pozici Developer Evangelist. – pozn.aut.

Razor – první pohled

Když jsem se poprvé setkal s novou syntaxí pro ASP.NET, tehdy ještě označovanou jako Plan9, byl jsem vcelku zděšen a vrátil jsem se o deset let zpět, kdy jsem programoval portál www.ipoint.cz v PHP. Jednalo se o klasický živelný vývoj bez koncepce, kdy jsem funkce přidával podle rozmarů zadavatele a počasí, a vše se měnilo ze dne na den. Na druhou stranu po čase byl portál přepsán od základů, nikým jiným než Jakubem Vránou, a funguje velmi úspěšně dodnes.

Když se na toto období podívám zpětně, tak to byla z mé strany přehlídka amatérismu v tom nejhorším slova smyslu. Všechno běželo na jednom jediném počítači, neexistovalo testování, o správě zdrojového kódu jsem neměl ani ponětí, a díky PHP to byl spaghetti kód jako prase, plný dvířek, vlastně vrat, pro SQL Injection. Změnu designu jsem musel dělat pomocí nástroje sed, protože šablonovací systém jsem nahradil stylem copy & paste. A proč to tak vypadalo?

PHP, tehdy verze 3, mi v podstatě nedávalo nástroje pro čistší styl vývoje, navíc informace o tom, jak dělat rozsáhlé aplikace v PHP, v podstatě neexistovaly. Naštěstí jsem místo MySQL použil PostgreSQL, a tím se vyhnul dalším problémům (než mě začnete kamenovat – potřeboval jsem transakce a úložné procedury, a o tom se v té době MySQL ani nezdálo. Na to by byl už lepší Access). Ono se vlastně stačí i dnes podívat do knížek pro začínající programátory v PHP. O parametrizaci SQL dotazů, kterými se na sto procent vyhnete SQL Injection, o technice connection pooling nebo o šablonovacích systémech se nedozví začátečník vůbec nic, a přitom jsou to věci velmi snadné na naučení i pochopení.

Razor – jeden a půltý pohled

Do našeho oddělení chodí během období maturit na praxi studenti z nižších ročníků středních škol, kterým zadáváme různé práce – většinou překládají technické články z angličtiny. Protože jsem byl ze syntaxe Razor vcelku rozčarován, jednoho studentíka, nepoznamenaného programováním, jsem si vzal jako pokusného králíka, jestli bude Razor fungovat tak, jak byl zamýšlen.

Zásadní problém ASP.NET vs. PHP je takzvaná křivka učení. Když chci začít dělat stránky v PHP, tak mi stačí se naučit relativně málo a jsem schopen něco udělat. U ASP.NET je třeba se toho naučit a pochopit relativně dost, než je člověk schopen udělat svoji první stránku, a to začátečníky velmi odrazuje. Základní myšlenka syntaxe Razor je využití ASP.NET co nejjednodušším způsobem pomocí takzvaných helpers (pomocníků), umožnit začátečníkům rychle napsat svoji první aplikaci, a přitom se toho muset co nejméně naučit.

Studentík se upsal spolužákovou krví, že o Plan9 ani nepípne, jinak přijde do pekla, a začal se sám učit. Řekl bych, že vývoj byl stejný, jako by se učil PHP, ale výsledek byl jiný. Spaghetti kód z principu věci zůstal, ale největší problémy začátečníků, jako je bezpečnost, neefektivní práce s databází a opakování kódu, nikde. Proč?

Razor – druhý pohled

 Razor kompletně využívá ASP.NET, ale většinu běžných činností, jako je například výpis dotazu z databáze, maximálně zjednodušuje pomocí helpers. Nejedná se o nic jiného než o vysokoúrovňové objekty, které zapouzdřují práci s databází, s Twitterem, s validací dat, s ReCaptcha, s Google Analytics atd. Součástí jsou i helpers  pro jednoduchý šablonovací systém, který vychází z Master Pages v ASP.NET, ale je opět zjednodušen.

Co mě docela zaujalo, je využití systému událostí, který činí začátečníkům v ASP.NET vcelku velké potíže. Ze všech událostí, které poskytuje ASP.NET, se vybralo pár, které jsou nahrazeny speciálně pojmenovanými soubory. Potřebuji-li například pro všechny soubory v jednom adresáři nastavit společnou šablonu (Layout Page), stačí vytvořit soubor _init.cshtml a v něm šablonu nastavit. Tento soubor se vykoná dřív než vlastní stránka s obsahem, a proto ji může ovlivnit.

Validace vstupních údajů

Na naprostou nutnost validovat vstupní údaje se v plno materiálech pro začátečníky zapomíná, nebo je toto téma zmíněno velmi okrajově. Razor poskytuje několik velmi jednoduchých metod, které validaci údajů od klienta usnadňují. Příkazem

var Price = Request["Price"];

 získáme hodnotu proměnné Price z požadavku klienta (GET, POST). Pomocí metody IsEmpty(), zjistíme, zda uživatel hodnotu vyplnil. Objektem Validation pak můžeme nastavit chybové hlášení:

if (Price.IsEmpty()) {
   Validation.AddFieldError("Price", "Product price is required.");
}

Pokud potřebujete zkontrolovat datový typ, tak stačí použít příslušnou „Is“ metodu, např. IsDateTime() a pomocí metody „As“ provézt příslušnou konverzi, např. AsDateTime().

Práce s databází

Co mě docela zaujalo, je možnost využití SQL Server Compact Edition 4. Jde o malou „embedded“ databázi, která na většinu projektů bude stačit, je kompatibilní s Microsoft SQL Server 2008, a tím pádem je přechod na „velkou“ databázi velmi snadný. Navíc nemusíte řešit nastavení databáze u hostera, protože si ji projekt nese sebou včetně „serveru“. Pokud budeme pokračovat v předchozím příkladu, práce s databází bude vypadat následovně:

var db = Database.OpenFile("SmallBakery.sdf");
if(Validation.Success) {
      var insertQuery = "INSERT INTO Products (Name, Description, Price) " +
               "VALUES (@0, @1, @2)";
      db.Execute(insertQuery, Name, Description, Price);
}

Dotaz je parametrizovaný (@0, @1, @2) a navíc se automaticky využívá connection pooling, který lépe využívá spojení s databází.

Šablonovací systém

Pomocí Layout Pages můžete velmi snadno vytvářet šablony. Stránka s obsahem se na začátku odkazuje na svoji Layout Page, která říká, jak se vykreslují jednotlivé sekce s obsahem. Stránka s obsahem může vypadat například takto:

 @{
    LayoutPage = "_layout.cshtml";
}
@section header {
    <div id="header">
        Chapter 3: Creating a Consistent Look
    </div>
}
@section list {
    <ul>
        <li>Lorem</li>
        <li>Ipsum</li>
        <li>Dolor</li>
        <li>Consecte</li>
        <li>Eiusmod</li>
        <li>Tempor</li>
        <li>Incididu</li>
    </ul>
}
<h1>Multisection Content</h1>
<p>Lorem ipsum dolor sit amet.</p>

A příslušná Layout Page (_layout.cshtml) takto:

 <!DOCTYPE html>
<html>
    <head>
      <title>Multisection Content</title>
     </head>
    <body>
      <div id="header">
        @RenderSection("header")
      </div>
      <div id="list">
        @RenderSection("list")
      </div>
      <div id="main">
        @RenderBody()
      </div>
      <div id="footer">
        &copy; 2010 Contoso Pharmaceuticals. All rights reserved.
      </div>
    </body>
</html>

Metoda RenderBody() vykresluje nepojmenovanou sekci a jednotlivé sekce lze nastavit jako volitelné.

Pěkná URL

Naprosto běžnou záležitostí současných webů je používání „pěkných“ URL. Tuto vlastnost má Razor „by design“. Pokud sestavíte například adresu http://www.muj­server.cz/blog/201­0/leden, tak se nejdříve bude hledat stránka blog.cshtml, pokud se najde, tak dostane jako parametr hodnoty 2010 a leden, ke které najdete v poli UrlData. Pokud se nenajde, bude se hledat 2010.cshtml v adresáři blog, atd.

Co říkáte na Razor?

Razor – co s tím?

Z původního zděšení nastalo příjemné překvapení. Pokud se na syntaxi Razor podívám očima začátečníka, tak se jedná o velmi jednoduchý systém na úrovni PHP, a pokud se na to podívám jako programátor s mnohaletou praxí, tak se jedná o systém, který od začátku nutí k dodržování základních bezpečnostních pravidel a dává nástroje pro čistý kód, a to jak jen to je ve světě špaget možné. Začátečník pak může navíc snadno přejít ze syntaxe Razor na normální .NET, který otevírá podstatně více možností než PHP. Například programovat jednočipové počítače, mobilní telefony nebo XBox 360.

Autorem článku je Štěpán Bechynský, specialista pro vývojové nástroje ve společnosti Microsoft v České republice. Informace pro vývojáře také najdete na blogu odborníků z českého Microsoftu.

Komentáře

Subscribe
Upozornit na
guest
53 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
alancox

„díky PHP to byl spaghetti kód jako prase, plný dvířek“
Není nad to svou neschopnost svést na nástroj.
Pokud je programátor prase, bude prase v každém jazyce.

MareceK

ok tak toto mi neda… programujem sice v php ale ked pouzijes
mysql_query('select * from $_GET['table']...');
a vo frameworku je redefinovana funkcia mysql_query ktora vyhlada $_GET, $_POST etc.. a na $_GET, $_POST … premenne pouzije
mysql_fucking_escape_everything_what_i_want($premenna,TRUE,I_REALLY_WANT_IT);
tak bude tvoj kod bezpecnejsi aj ked si prase… a nezalezi na jazyku

pepavondepo

Pouze někteří programátoři jsou zkušení hned od svých 13-ti let a rovnou píší dokonalý kód, co?

fos4

Svádět svojí nezkušenost na jazyk mne přijde stejné jako říct, že auto může za to že jezdím jako prase.

ondrah

To ne, ale pokud autor tvrdí, že jeho kód byl prasácký „díky PHP“ (nebo díky jakémukoli jinému jazyku), tak je to spíš prasácký alibismus. „Prasáckost“ PHP3 spočívala leda v tom, že v něm něco dokázali napsat i totální amatéři a začátečníci, aniž by interpreter řval na každém řádku 10 warningů, ale taky ty jejich výtvory podle toho vypadaly.
Taky je ovšem třeba podotknout, že v té době bylo obecně mezi vývojáři jen velmi slabé povědomí o webové bezpečnosti a existovalo jen málo přístupných zdrojů informací na toto téma. Takže s trochou nadsázky se dá říct, že toho, co nám dnes připadá jako zoufalý amatérismus, byl před 10 lety web plný…

blizzboz

snažiť sa o dokonalý kód v PHP je ako prísť na SM párty v latexovom obleku a poprosiť dominu aby si z vás spravila boxovací pytel… chce to proste dávku masochizmu.

Martin Malý

Řekl bych to asi takto: Za obrovskou popularitou PHP jsou dva faktory. Snadnost je jen jeden z nich, ten druhý je, že když si začátečník napíše skript, tak najde hosting zdarma nebo za 10 korun, kde mu poběží. Když napíše něco trošku vážnějšího, sežene na to plný kýbl hostingů do sta korun měsíčně. Má něco takového k dispozici Razor (či ASP.NET obecně)? Poměr bych odhadoval tak 50:1, a to jsem možná ještě optimista.
Řeči o kvalitě služeb, které jsou tedy dražší, jsou v téhle věci irelevantní. U PHP je totiž povlovná nejen křivka učení, ale i křivka nákladů na provoz.

KapitánRUM

Je to tak, podobná situace je s Java. Java tě přímo vede psát hezký kód, ale k čemu to je, když na to hosting prakticky neseženeš a na napsání ,,Hello Word“ s EJB+JavaFaces+o­máčka okolo potřebuješ pět let studovat?
Z ASP.NET se dá alespoň něco vyplivnout, ale MICROSOFT na public serveru? Noční můra! A hosting za pár kaček? SEN!


František Kučera

Ta Java se dá hostovat u Googlu: https://code.google.com/intl/cs/appengine/ myslím, že do nějaké míry dokonce zdarma.

Michal Augustýn

Tenhle argument byl IMHO aktuální před mnoha lety. Už v roce 2004 tu byl první free ASP.NET hosting (a to se teď bavím jen o Česku) – http://www.aspweb.cz (který právě skončil). Stále je tu ale velmi kvalitní ASPone.cz nebo ASP2.cz.
Stačí do googlu zadat „asp.net free hosting“ a výše uvedené odkazy vyběhnou.
Jistě, je pravda, že PHP free hostingů je mnohem více, ale upřednostňuju kvalitu před kvantitou (i když kvantita by měla teoreticky ve zdravém konkurenčním prostředí vést i k vyšší kvalitě :)). Aspoň se člověk nemusí prohrabávat plným kýblem rádobyhostingů…;-)

Tomáš J. Kouba

Dobrý den, já si myslím, že za oblibou PHP jsou i jiné věci. Například na rozdíl od asp.net je za PHP silná komunita. Microsoft do vývoje dává hodně peněz, ale bez problémů přidává další frameworky. .NET se začíná podobat Javě a to je pro ASP.NET špatně. Pokud Microsoft usoudí, že tento framework se již nehodí „do krámu“, přestane ho vyvíjet. Je tady velké riziko, že investuji velkou energii a čas do něčeho, co za 2 roky začne umírat. To se u velkých komunitních nástrojů nestává.
Podle Tiobe indexu podíl .NET technologie klesá na rozdíl třeba od Pythonu. Za to může samozřejmě především strmý sestup (Visual) Basicu. Myslím, že za tím není objektivní srovnání kvality nástrojů, ale nedůvěra v Microsoft. To podle mého není chybou Microsoftu, ale principem Open a Close source.

tom

Tak to si snad delate srandu ne ?
U vas se jedna o zasadni nepochopeni celeho IT sveta. Microsoft ten svuj framework tvori uz cca 10 let. A verze frameworku jsou kompatibnilni to znamena ze kdyz neco udelate ve frameworku 1.0 tak to spustite po kompilaci i pod 3.5 s minimem uprav v kodu.
A ted me ukazte framework pod JAVOU, ktery se takhle chova, ktery se kontinualne vyvyji ? NIC, NULA . Pri prechodu na jinou verzi mate co delat dva mesice a ono se vetsinou rozvoj zastavi a dalsi particka vytvori zase neco noveho a lepsiho. Vyvoj je urcite rychlejsi protoze vyvojari nemusi hledet na zpetnou kompatibilitu. Ale takhle to nefunguje. Pokud mate velky projekt na kterem pracujete 5 let tak nemuzete menit framework kazde 2 roky.
Tak treba zkusime u JAVY nasledujici pripad:
Servlety – zastarale – ok prechazime na
JSP – hmm ale ty uz jsou taky zastarale – kod se kompiluje do servletu a celkove uz to neodpovida dobe tak pouzijeme jeste:
JSF – ok dobra technologie ale vyvoj komponent je uz dal takze do toho jeste vrazime
ICEFACES ten ma podporu AJAX – ok tak jo to uz mame 4 technologie ktere se musime naucit aby jsme zvladli vytvorit jeden jediny projekt ( nebavim se o 4 strankach ale o velkych projektech )
Jeeee a on jim z ICEFACESU odesel hlavni vyvojar a de-facto tvurce celeho frameworku – vyvoj se zastavuje, je to strasne nachylne k chybam – je az neuveritelne kolik bugu tam jsou schopni icefaces vyvojari nasekat.


.NET Javu „temer“ okopiroval. V nekterych pripadech jsou stejne nazvy parametru.


Sestup Visual Basicu je zapricineny prechodem vyvojaru na C#
tim netvrdim ze podil .NET technologie je neklesa.


Neduvera v Microsoft ? To si delate prdel?
A komu by jste chtel duverovat vice. Bande par programatoru ktery si tvori frameworky doma na kolene a pak kdyz dostanou nejaky dobre placeny misto v klidu odejdou a s vyvojem prestanou ?

František Kučera

„Bande par programatoru ktery si tvori frameworky doma na kolene“

Ano, radši té, resp. tomu svobodnému softwaru, který vyvíjejí. Pokud se na daný projekt vykašle open source vývojář, může to vzít kdokoli za něj – funguje tu trh a konkurence, jako zákazník si vyberu libovolného dodavatele (kdo bude pokračovat ve vývoji), resp. vyberu si toho nejlepšího. V případě uzavřeného softwaru si nevyberu – tam jsem odkázaný na původního autora (který je na trhu daného programu monopolistou) a pokud ten přestane* pracovat, mám prostě smůlu, konec, musím všechno zahodit a začít stavět znovu.

*) těch důvodů může být spousta, třeba doslat lépe placené místo a zrušil svoje sročko, nebo mu podnikání naopak jde dobře, získává lepší a lepší zakázky a najednou jsou pro něj původní (malí) zákazníci jen otravný hmyz, který jen žere čas a pořádně neplatí. Nebo si řekl, že udělá novou verzi svého produktu a starou přestane podporovat – tak si zákazník koupí buď novější (a dražší) verzi, nebo má smůlu.

jozefsevcik

V rade vecí máte pravdu, ale to čo ste popísal konkrétne u Javy sa dá jednoducho preniesť na .NET a knižnice od MS v rámci .NETu, z hlavy ma napadá napr. Data access od MS od Datasetov, linq2sql, entity FW, ďalej System.Adding/MAF/MEF.
Každopádne máte pravdu v tom, že v .NETe sa zpetná kompatibilita dosť rieši.
Tej zažitej bájke o opensource vývojároch čo si doma na kolene niečo klepú veríte ? Áno, u menších projektov/con­tributoroch. Pozrite sa napr. na list commiterov u veľkých projektov ASF a kto ich zamestnáva.
Pointa je v tom, že keď MS prehlásil, že prakticky ukončuje vývoj linq2sql, mohol ste si iba zavzdychať.
Keby lead NHibernate projektu prehlásil, že končí, tak to preberú ďalší v rade, prípadne si Vaša firma môže projekt forknúť/zamestnať človeka ktorý v tom bude pokračovať atd, pokiaľ je to pre ňu kritické.

Michal Augustýn

Pointa je v tom, že keď MS prehlásil, že prakticky ukončuje vývoj linq2sql, mohol ste si iba zavzdychať.
Cože? Kde to ohlásil? Vím, že se tenhle mem šíří (hlavně po ohlášení EF), ale není na něm nic pravdy – např. v .NET FW 4.0 je Linq2Sql plně podporovaný a přináší dost vylepšení…

jozefsevcik

Mem…
Linq2Sql bol, pokiaľ ma pamať neklame, uvedený s .NET 3.5, cca koniec roku 2007.
O rok neskor už bolo oznámené, že od ďalšej verzie .NETu, 4.0, bude „recommended“ prístup Entity Framework [1].
To čo je v .NET 4.0 ohľadom Linq2Sql mi po rýchlo prezretí pripadá skôr ako bugfixy, ale nemám osobnú skúsenosť a hlbšie som to neštudoval, takže sa môžem mýliť, tým lepšie pre užívateľov Linq2Sql.
Že je aj v .NET 4.0 podporovaný je jasné, jak som písal predtým, MS rieši kompatibilitu.
Inak ešte predtým, v .NET 2.0 boli „recommended“ Datasety.
Bavíme sa o odstupe 2–3 rokov.
Pointa toho čo som písal, a z čoho ste vytiahol tu jednú vetu je,
že pokiaľ MS zmení „recommended“ API a prestane, alebo utlmí další vývoj,
nespravíte s tým cca nič, aspoň nie u starších vecí.
Myslím, že s MS-PL sa o tu MVC napríklad mení a je možné forkovať.
[1] http://blogs.msdn.com/b/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx

Michal Augustýn

Aha – takovýhle recommendations někde na blogu bych se moc nechytal – kdyby to bylo v MSDN, to by byla jiná.

I v tom Vámi odkazovaném článku se píše „We are listening to customers regarding LINQ to SQL and will continue to evolve the product based on feedback we receive from the community as well.“ a tak to je.

Jen jsem chtěl poukázat na nepravdivost věty „Pointa je v tom, že keď MS prehlásil, že prakticky ukončuje vývoj linq2sql, mohol ste si iba zavzdychať.“, nic víc.

K věci: Je celkem jasné, že může být výhodnější pracovat nad open-source knihovnami (s vhodným licencováním a rozumně psanými zdrojáky) než nad něčím uzavřeným.

že pokiaľ MS zmení „recommended“ API a prestane, alebo utlmí další vývoj,
nespravíte s tým cca nič, aspoň nie u starších vecí.

Pokud by mi mělo vadit, že utlumí další vývoj, tak to předpokládá, že používám něco, co nutně potřebuje další vývoj. A to si v produkčním prostředí dovolí použít asi málokdo. O bugfixy bych se u MS nebál (aspoň moje dosavadní zkušenost je taková).

Btw. Datasety používám i v .NET FW 3.5 a nemám s nimi vůbec žádný problém. Nikdo nikoho nenutí používat jen a pouze aktuálně cool technologie. I když je tu EF a WPF, Datasety i WinForms jsou stále podporované (a už vůbec ne deprecated nebo obsoleted)…

František Kučera

„Pokud by mi mělo vadit, že utlumí další vývoj, tak to předpokládá, že používám něco, co nutně potřebuje další vývoj. A to si v produkčním prostředí dovolí použít asi málokdo.“
On tu totiž někdo tímhle způsobem kritizoval Javu – když to budu brát takhle (nasadím do produkce jen to, co mi stačí, jak je, a nepotřebuji nezbytně další vývoj), tak pak vůbec nevadí, že vznikají nové a nové frameworky – prostě budu používat ten starý, na kterém jsem původně aplikaci postavil a netrápí mne to.

Michal Augustýn

Přesně tak!

jozefsevcik

V tej mojej vete bolo slovo *prakticky*, a bolo tam práve preto, že MS nepovedal otvorene „ukončujeme vývoj linq2sql“, ale povedal „EF bude recommended a do neho budeme investovať“. To som myslel tým „prakticky ukončuje“.
Opakujem, že je mi jasné, že všetky staršie veci pobežia aj nad novým FW, lebo na .NETe robím a viem, že MS kompatibilitu rieši, takže je mi jasné, že tie datasety z 2.0 fungujú aj na 3.5/4.
Datasety som uviedol ako príklad toho, jak sa za 3 roky zmenil v .NETe 3× „recommended“ wrapper nad ADO.NET pre prístup k relačným DB.
Osobne ma to netrápi, od 2006 idem na NHibernate a osobne som pre neho robil cca 10 patchov, jednoducho preto, že to bolo možné.
Netvrdím, ani som nikde netvrdil, že by som vedel o situácii, kedy nejaký subframework v .NETe nebude fungovať vo vyšších verziách FW, aby bola rozbitá kompatibilita alebo niečo podobné.
Hovorím čisto o situácii, kedy napr. postavím niečo nad linq2sql a v momente kedy prestane by „recommended“ tak mi síce všetko ďalej fajn pobeží, ale pokiaľ by som chcel, nemám možnosť spraviť fork, fixnúť alebo rozširovať. Buď to nechám na linq2sql, alebo to musím preniesť do niečoho iného, čo rieši daný problém.
Zatiaľ čo v Jave spomínanej vyššie v prípade, že pôvodný autor prestane s vývojom tu možnosť mám, pretože vačšina bežne používaných vecí je OSS.
Šlo mi čisto o tento praktický rozdiel – mám/nemám možnosť.

jozefsevcik

Aha – takovýhle recommendations někde na blogu bych se moc nechytal – kdyby to bylo v MSDN, to by byla jiná.
Mám tomu chápať tak, že ten blogpost nemá až takú váhu, že to nie je treba brať nejak vážne ?
a) To je blog ADO.NET teamu
b) Človek podpísaný pod tým článkom je Program Manager

isnotgood

Tohle umi snad kazdej framework v PHP…to je tedy jako vse, cim chce Microsoft „podrezavat“ PHP? Davam bod za superduper emo nazev, ten je mucinky lowiskovej.

Petr

Pokud budu požadovat hosting s nějakým předinstalovaným PHP frameworkem nebo s možností si ten svůj doinkludnout, tak už ten výběr nebude tak široký a levný.

František Kučera

Frameworky jsou přece většinou jen akorát další .php soubory, které se připojí k programu. A pak je tu ještě hnůj v podobě různých proprietárních „akcelerátorů“ (.so knihovny…), které se využívají hlavně k obfuskaci a resp. provozu uzavřených skriptů, o které se jejich autor úzkostlivě bojí (nebo se bojí, že by se mu ostatní vysmáli, kdyby jeho kód viděli – to je častý motiv, proč uzavřený software existuje). Ale u nás takové „akcelerátory“ klidně mít můžeš – kdo chce kam…

setka

PHP „akcelerátor“ nebo též „opcode cache“ nemusí sloužit jen ke skrývání kódu. A dovolím si říct, že nasazení takové věci na hostingu obvykle nesleduje tento cíl.
Takový eAccelerator nebo php-apc dokáže snížit čas běhu PHP skriptů o desítky procent. Záleží na konkrétní aplikace, tuhle hodnotu jsme naměřili u celkem rozsáhlého portálu, který využíval Zend Framework. Výsledkem je nižší zátěž serveru a často i citelně rychlejší odezva webu.
Uzavření kódu bývá podle mě častěji spíš z důvodu oprávněné obavy o ukradnutí aplikace, na kterou padlo obrovské množství práce, a nějaký open source model je nereálný. Nebo také security-by-obscurity. I když u různých bastličů kódu můžou být motivy různé, nad některými dotazy v diskuzích od takových lidí zůstává rozum stát. A že je takových hodně okolo PHP, to je spíš dáno historickým vývojem, něž kvalitami jazyka v aktuální verzi.
Jo a takový Nette framework se dá includovat v podobě jednoho souboru, co má pár set kB. Můžu použít jakoukoliv, třeba vývojovou, verzi, můžu nasadit provizorní opravu chyby atd. a nemusím řešit, co je k dipozici přímo na serveru.

František Kučera

„tuhle hodnotu jsme naměřili u celkem rozsáhlého portálu“
V takových případech se ale nepoužívá běžný komoditní hosting a běží to na vlastních serverech nebo aspoň VPS, ne?

andy

Zavisi od navstevnosti. Dnes mozes stiahnut a nainstalovat drupal, staci si len prisposobit skin a mas CMS. A kludne aj u desat korunoveho hostingu.

setka

Ano, bylo to na vlastním serveru.
Ale i komoditní hosting nasazením třeba eAcceleratoru může získat – snížení zatížení serveru, v některých případech rychlejší odezvy webů. Samozřejmě za předpokladu, že to snížení zátěže nevyužijí k tomu, aby na jeden stroj dali o 20 % víc zákazníků.

honza

Článek se měl spíš jmenovat „Podřízne Razor PHP3?“. Pak ať si klidně řeže… :)
V PHP lze naprosto elegantně a jednoduše psát bezpečné a robustní aplikace, které splňují zadání, ale pokud si firma místo programátora najme šulína, který je kodér, ale myslí si, že je php programátor, tak pak se jedná o jiný probém, který nesouvisí s PHP jako jazykem.

liborse

Zastávám stejný názor. PHP je výborný nástroj s mnoha výhodami. Prasecký kód se dá napsat kdekoliv.

blizzboz

nenapísal si aké má PHP výhody, lebo ja o žiadnych neviem…

honza

možná byste měl vědět, že každý prog. jazyk má výhody i nevýhody. Tak to prostě je a každý průmerně vzdělaný student informatiky by to měl pochopit hned při úvodu u paradigmat programování. Stačí si odpovědět otázkou: Proč na světě existují stovky prog. jazyků a ne jen jeden?

blizzboz

V PHP lze naprosto elegantně a jednoduše psát bezpečné a robustní aplikace

poprosím ťa aby si nabudúce pred napísaním príspevku zahasil toho jointa.

honza

Proč? Má tedy moje firma výhradně přejít na jiný nezlý jazyk jen proto, že hrstka zapšklých trueprogramátorů před 10 lety rozhodla, že php je špatné a že všechny zakázky světa odteď budou jen v Javě nebo Pythonu :D :D :D

Ivan Nový

kdyby MS vytvořil systém programování serverových aplikací, který by zcela odstřihl HTML. A vše v aplikaci by byly objekty, s danou funkčností, bez viditelné vazby na HTML. HTML by byl jen jejich produkt na výstupu, o který by se nebylo třeba starat, tak jako se nestaráte o výstup kompilátoru. A vůbec nejlepší by bylo, kdyby základem byl javascript, aby byla jazykově homogenní, jak serverová, tak klientská část aplikace.

jozefsevcik

ASP.NET v ‚klasickej‘ podobe, naštastie vymiera (resp. nahradzuje sa asp.net mvc) a myslím, že veľa tých, ktorí mali tú „česť“ s tým pracovať sú tomu radi.

Tomáš Herceg

To není pravda, na ASP.NET WebForms nadává většina lidí, protože ho absolutně nepochopila, nezná základní principy a diví se, že to pak dělá to, co dělá. MVC je opět návrat ke špagetám, i když se tomu dala nálepka „návrhového vzoru“, aby se to nikdo neodvážil říct.
Razor je ještě větší návrat ke spaghetti kódu, na druhou stranu začtečník v něm asi nadělá „méně škody“ než v čistém PHP (na verzi nezáleží). A přiznejme si, že když začátečník hledá články pro začátečníky o PHP, najde většinou samý odpad, který je v těch prasečinách ještě podporuje.

Michal Augustýn

MVC je opět návrat ke špagetám, i když se tomu dala nálepka „návrhového vzoru“, aby se to nikdo neodvážil říct.
To jsi asi zase Ty nepochopil ASP.NET MVC :) Špagety se tam vyskytujou jen ve views a to jen tehdy pokud píšeš jako prase a navíc v ASPX nebo Razor enginu. Obecně by měly být views jen <am>šablony (tedy žádný imperativní kód) – tomu se docela pěkně přibližuje třeba Spark, který je pěkně deklarativní (a tudíž neumožňuje tam naprasit nějakou imperativní prasárnu).

Tomáš Herceg

Už ty vaše Html.BeginForm() je prostě imperativní kód, který mě v těch šablonách štve. A to se používá, to mi nevykládej, že ne.

Michal Augustýn

Ano, však to píšu – pokud je člověk prase a navíc používá ASPX View Engine…;-)

Ivan Nový

Když použijete Kohanu V3, a voláte pohled z pohledu, tak každý typ pohledu použijete ve zdrojáku pouze jednou, a zobrazíte tolikrát, kolikrát potřebujete a kdekoliv na stránce, jen s jinými daty uloženými v poli a získanými vně pohledu z datového modelu. Jinak šablony jsou nesmysl, vedoucí právě ke špageti kódu, a opakování funkčně stejných částí na různým místech, takže při změně je musíte opravovat na mnoha místech. Aby bylo programování webu dokonalejší, muselo by se dít ve vrstvě nad HTML, css a DOMem, ze které by HTML, css a DOM nebyl přístupný, tak jako z kompilátoru obvykle nejsou přístupné konkrétní instrukce procesoru. A ta vrstva by musela být objektová a rozhodně by nesměla mít stromovou strukturu jako má HTML, nebo DOM.

jozefsevcik

Razor absolútne nepoznám, okrem tohto článku, PHP som naposledy videl pred dávnymi rokmi, neprogramujem v ňom a nehodnotím ho, ani jeho komunitu.
Že sa dá bastliť všade je nám asi obom jasné.
Čo sa týka „klasického“ ASP.NET, dovolím si tvrdiť, že som ho pochopil a poznám základné princípy. Váš predpoklad, že každý, kto danú vec kritizuje, ju zákonite nepochopil, je úsmevný.
Podľa môjho názoru je staré ASP.NET je ten druh nástroja, ktorý keď si zoberiete na riešenie problému, v tej chvíli máte problémy dva.
Na druhom a poslednom projekte s ASP.NET, keď ma už prestalo baviť šaškovať s CSS Control Adapters som radšej utiekol k Monorail (ASP.NET MVC ešte nebolo), a neskôr z webového vývoja na MS platforme úplne a zostal len u newebových vecí v .NET.
Konkrétny výčet technických problémov spojených s vývojom, a najma údržbou ASP.NET aplikácií by vydal na samostatný článok. Ostatne, myslíte si, že ten boom a nadšenie z ASP.NET MVC v .NET komunite existuje preto, že sú všetci idioti a nepochopili úžasné princípy ASP.NET ? Priznajme si, že je to preto, lebo málokoho baví sa v tých sr***ch hrabať :)

Michal Augustýn

Prakticky všude, kde jste napsal ASP.NET, jste chtěl napsat ASP.NET WebForms? Jinak to totiž nedává moc smysl…
.
ASP.NET je jen základní framework pro psaní webových aplikací, který zpřístupňuje zjednodušeně řečeno jen Request a Response.
Teprve nad ASP.NET je postaveno ASP.NET WebForms, ASP.NET MVC, ASP.NET Web Pages nebo Monorail.

jozefsevcik

Áno, mal som na mysli „ASP.NET WebForms“.

Tomáš Herceg

„Váš predpoklad, že každý, kto danú vec kritizuje, ju zákonite nepochopil, je úsmevný.“
Bohužel podložen reálnými zkušenostmi mimo jiné ze školení a kurzů ASP.NET WebForms, které vedu. Spousta lidí si stěžuje na ViewState, na to, že špatně funguje tlačítko Zpět v prohlížečce (což se mi nikdy nepovedlo udělat, nevím, co s tím patlali), že to nefunguje bez Javascriptu, že to jde proti HTTP protokolu a kdesi cosi, ale je to způsobené v 99% případů tím, že neznají a nechápou technologii, kterou používají. Používají PostBack tam, kde má být normální odkaz atd. Pak se diví, že to renderuje škaredé výstupy, že to generuje moc dat, místo CSS používají vlastnosti FontSize, BackColor a nadávají, že to renderuje tuny inline stylů atd.
Boom kolem MVC je pak způsoben tím, co jsem popsal v předešlém odstavci – lidi od WebForms odcházejí, protože nejsou ochotni poznat ho do hloubky (neznají ani životní cyklus stránky, bez toho se nedá dělat) a jdou prasit v MVC. Většina z nich. Tak to prostě je.

jozefsevcik

Presne tak, sám ste to presne vystihol, 100% súhlasím:
„Lidi od WebForms odcházejí, protože nejsou ochotni poznat ho do hloubky“
Myslím, že naše názory sa rozchádzajú len v tom, prečo nie sú k tomu ochotní.
Vy tvrdíte, že je to preto lebo ho všetci nepochopili, nechcú sa naučiť/pochopit.
Ja tvrdím, že je to preto, lebo WebForms je proste zlý koncept, zlá implementácia a ľudia začali odchádzať „vo veľkom“ okamžite vo chvíli, kedy mali nejaku alternatívu podporovanú Microsoftom.

pas

Javascript? No když už vysokoúrovňový framework, tak od JS bych byl rád odstíněn ještě radši než od HTML.

Ivan Nový

problém je klient, aby se do klientů dostalo něco jiného, je z obchodního hlediska téměř nemožné.

34535

Vyborny zmysel pre humor, haha!

František Kučera

Zkus Javu a GWT.

Michal Augustýn

V článku (i jeho nadpisu) je použita špatná terminologie.

Razor je jen teplatovací engine (se svou vlastní syntaxí), který není nijak vázaný na ASP.NET. Je to tedy něco jako T4. Prostě strčíme do šablony data a vypadne nám string.

To, o čem Štepán píše, se jmenuje ASP.NET WebPages („We are referring to these pages as simply “ASP.NET Web Pages”“). Ten sice používá teplatovací jazyk Razoru pro popis šablony stránky, ale hlavně obsahuje tu hi-level nadstavbu (helpery) nad ASP.NET i dalšími částmi .NET Frameworku, které tolik usnadní start začátečníkům.

Správně by tedy nadpis článku měl být „Podřízne ASP.NET WebPages PHP?“.

LamiCZ

Nevím, o co se tu hádáte, je to vše o nabídce a poptávce – zkrátka o penězích, aplikace je udělána tak kvalitně, kolik se na ni vyčlení peněz. A protože je holt vžitá představa, že programování „se udělá samo“, podle toho to taky vypadá.

Koubas

Jedno se musí M$ v tomto případě nechat a to je smysl pro humor v případě výběru původního jména, kterým dali jasně najevo, že si jsou vědomi toho, jaké má toto rozšíření, či co to vlastně je, ambice a co v něm bude vznikat za výtvory.
Filmoví fajnšmekři ví, že film „Plan 9 from Outer Space“ dlouhou dobu kraloval žebříčku IMDB, avšak ne tomu hlavnímu – top-100, alébrž BOTTOM-100. V jakési knize The Golden Turkey Award byl jmenován na nejhorší film všech dob.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.