Dlouho jsem přemýšlel nad tím, jak začít můj historicky první příspěvek vývojářské komunitě. Jak začít takový seriál a hlavně – proč vůbec nějaký seriál napsat, když existuje všude plno nejrůznějších knížek, tutoriálů, blogů, příruček a všeho možného. Tato otázka mě kupodivu přivedla k odpovědi.
Začnu tedy tím, že vám popíši, co mě k tomuto kroku vede, čemu se chystám v tomto seriálu věnovat a čeho se snažím dosáhnout.
Klidné moře nedělá dobré Námořníky
Každý programátor to zná – chce se naučit nějaké nové technologie, postupy, frameworky, případně rovnou nový programovací jazyk. Postup bývá v libovolném z těchto případů z pravidla následující:
- Stažení učebnice
- Procházení tutoriálů
- Shlédnutí naučných videí
- Procházení příkladů
- Docházení na kurzy
Takovéto kurzy jsou výborné na to, co v tu konkrétní chvíli potřebujete - naučit se něco krok za krokem. V okamžiku, kdy budete mít tyto znalosti, můžete začít vesele vyvíjet vaše vlastní aplikace. Pokud budete mít štěstí, nedojde k žádnému problému a celý vývoj aplikace od začátku až do konce proletíte…
Pokud mít štěstí nebudete, strávíte hodinu například tím, proč se vám někde něco nezobrazilo (například váš Model při scaffoldingu). Takovéto problémy budete muset řešit, zajdete tedy na stackoverflow, Google a podobné zdroje, kde najdete při trošce štěstí odpověď, proč vám to nefunguje. Pokud mít to štěstí nebudete, strávíte hodiny hledáním, zkoušením… Toto je způsobeno především tím, že nemáte prozatím zkušenost s tímto daným problémem. Naučíte se jej vyřešit až v okamžiku, kdy tento problém nastane a vy budete mít pár hodin před deadlinem projektu. První věcí, na kterou bych se tedy ve svém seriál chtěl zaměřit, je předat vám předem zkušenosti s nějakými pitfally, se kterými se pravděpodobně setkáte.
Co se v žádné knížce nenaučíte, je rovněž dělat věci správně – především tak, abyste si ušetřili práci, nebo předcházeli nějakým problémům do budoucna. Zde bych především zmínil nějaké problémy s udržováním kvality kódu, jeho rozšiřitelností a přehledností. K tomuto vám především pomohou určité zažité postupy, enterprise návrhové vzory a podobné informace, které načerpáte sice z knih pro vývoj a architekturu softwaru, ale ty číst při studiu .NETu pravděpodobně nebudete.
Mým hlavním cílem je tedy předat vám moje know-how, moje zkušenosti kterých jsem nabral právě při vývoji malých až těch největších softwarových projektů. Přál bych si, abyste je měli ideálně ihned a né až ten daný problém nastane.
Vím, že nic nevím
Velmi známá věta Sokrata, kterou lze nejlépe asi vyložit tak, že tím nejhorším co může člověka ohledně vědomostí potkat, je falešná myšlenka vědomosti. Proto to bylo pro autora takovým přínosem – zjistil, že se mýlil, že něco neví, že se má kam posouvat.
Za ta léta, kdy se pohybuji v oboru, je pro mě kupodivu velkým přínosem situace, kdy zjistím, že něco neumím, případně – že to dělám špatně. V určitých ohledech se ale už dostávám do situace, kdy postrádám někoho, kdo mi poví “TYTYTY, takhle se to opravdu nedělá, přepiš to” a podobně. Zde tedy leží můj první osobní důvod, proč chci psát tento seriál. Prosím vás tedy nyní… Reagujte mi na můj seriál, mínusujte, kritizujte, posílejte mi kypřící prášek v obálkách... ale vždy prosím dejte popis, co dělám podle vás špatně, co by šlo vylepšit. Je to pro mě ta nejlepší odměna, za mou práci zde na dotNETportalu – naberu tak pro mě – pro někoho, kdo se chce zlepšovat, to nejcennější – know-how. Netvrdím tedy, že mám patent na rozum, že vše dělám nejlépe. Za vaše objektivní a k věci komentáře, vám tedy předem děkuji.
A nakonec ta poslední a nejdůležitější motivace k sepsání tohoto seriálu – přeji si na .NET (C#) převézt programátory z ostatních technologií – především PHP, NodeJS, Django, Ruby on Rails. Nevidím totiž jediný důvod, proč některé z nich i nadále používat – kromě nějakých Legacy systémů, či jiných historických důvodů. Toto se může zdát jako nějaký pokus o to, vyvolat zde nějakou hádku, co je lepší, co není atp. Já vás ale nebudu nutit přecházet z vámi milovaného PHP, chtěl bych ale, abyste tomu dali šanci a jsem nadmíru přesvědčený, že až poznáte doposud nepoznané, už vás nebudu muset o nic prosit a rádi zkusíte .NET i jako vaši hlavní produkční platformu. Důvody k tomu budou především následující:
- komfort vývoje
- rychlost vývoje
- kvalita a přehlednost kódu
- rychlost softwaru
- naprostá samostatnost
- samostatnost .NETu
Jak se o to pokusím
Nebudeme se zde učit programovat v C#, některé věci ovšem zmíníme, abych ukázal hlavní rozdíly oproti například PHP, NodeJS. V prvních dílech se také budeme učit základy ASP MVC, řešení bude tedy primitivní, jednoduché. V následujících částech seriálu však budeme předchozí řešení vylepšovat, ukážeme si různé finty, unfair tricky a podobné věci, které vám práci zpříjemní a především zkrátí.
Zatímco se vám budou zdát první části poměrně jednoduché, postupně přijdeme k těm složitým věcem a nakonec enterprise řešení, na co se tedy můžete těšit především?
- Rozdíly C# oproti jiným jazykům
- ASP MVC – view, model, controller
- Razor, helpery, šablony
- Scaffolding a AOP
- Controllery, Routing, Binding, Validace
- Data, LINQ, Enumerable, Queryable, Ajax
- MVC lifecykle, filtry
- Unit Testing, UI testing, Continuous integration
- Threading model, Async, Hangfire
- Dependency injection, IOC Container, Separation of concerns
- RDM vs ADM, repozitáře, servisy, controllery
- WebAPI
- OData
- T4 Templates
- AngularJS a MVC
- AngularJS, Typescript + T4
………
Vskutku, není toho málo. Nikdo netvrdil, že to bude seriál na 2 týdny
Aby tento článek nebyl jen tak úplně suchý, podíváme se zde rovnou na největší mínusy .NETu a zaměříme se na nepravdivá tvrzení.
Vývoj je drahý – vývojové nástroje, testovací servery
Do relativně nedávné doby tomu opravdu tak bylo. Především pokud jste to mysleli vážně a nechtěli vyvíjet na SharpDevelop, MonoDevelop, NecoDevelop atp. a chtěli jste vyvíjet pomocí Visual Studia. Licence nebyly vůbec levné a tak to bylo především pro malá vývojářská studia překážka, přes kterou nejel vlak. Aniž by mi vyrostl nos, můžu s čistým svědomím říci, že lepší vývojářské IDE v současné době neexistuje. A co lépe… za určitých podmínek je i verze na úrovni professional zdarma. Mluvím zde o verzi Community, kterou microsoft uvolnil zcela zdarma i pro komerční použití.
Jako podmínkou je, že lze v jedné firmě použít maximálně 5 licencí, pokud firma nedosahuje určitého obratu (1 milion dolarů ročně) a počet počítačů nepřekračuje 250. Pokud splňujete tyto podmínky – obzvláště ten o obratu ^_^, můžete visual studio zdarma používat i pro komerční účely. Zde je ale jedno menší ALE, které rovnou použiji pro ukázku značení pitfallu:
Pokud vyvíjíte software pro klienta, který nesplňuje výše uvedené požadavky, nemůžete ani vy používat Visual Studio community.
Co se týče testovacích serverů – pro vývoj můžete používat vestavěný server přímo ve Visual Studiu, který vám prokáže opravdu dobrou službu a vesměs pro vás bude při vývoji dostačující.
Visual Studio 2015 Community můžete stáhnout níže, osobně vám však prozatím doporučuji stáhnout si verzi 2013 Community, jelikož je blíže Windows světu, kde velkou část práce udělá za vás. Verze 2015 se už trošku přibližuje Linuxovému multiplatformnímu světu, kde si všechno tvrdě odpracujete. Samozřejmě verze 2015 přináší i spousty výhod, ale ty prozatím bez utrápení se nevyužijete (multiplatformní vývoj, Windows 10 apps), nebo nejsou předmětem tohoto seriálu (Roslyn extensions).
Visual Studio 2015 Community
Visual Studio 2013 Community
Co se týče databáze, lze použít zdarma SQL Server Express, která s sebou sice přináší některá omezení, pravda je ale taková že pro malé i střední webové aplikace, vám to bude zcela stačit. Mezi hlavní omezení patří 10GB / databázi.
SQL Server Express lze stáhnout zde:
SQL Server Express
Pokud budete potřebovat nějaké “neprodukční” prostředí například na testování atp., vystačíte si bez větších problémů s IIS Express, což je konkurent Apache z maloměkkého světa. Opět je zde několik omezení, pro neprodukční provoz vám to ale zcela stačí.
Pro více informací o IIS Express a stažení zde:
IIS Express
Jako náhradu za plnohodnotnou databázi lze použít tzv. LocalDB, tato databáze funguje pak jako běžný soubor na vašem webu, kam přímo vaše aplikace může zapisovat a pracovat s ní jako s normální databází, pro více informací je zde článek dotNetPortal kolegy:
sql server express user instances a sql server express localdb
Vesměs jakákoliv .NET aplikace má potom možnost hostit webový server přímo v sobě, přes tzv. self-host webové aplikace.
Hosting je drahý
Opět se jedná tak trošku o informaci založenou na historii, kdy nebyl .NET hosting tolika rozšířený a tak jednotlivé služby neměly tak přijatelné ceny. Dnes už je to jinak. I u nás v ČR seženete poměrně kvalitní hosting za krásné ceny, není tak pro vás těžké sehnat hosting:
- Neomezeně webového prostoru
- .NET 4.6 / Windows
- Neomezená celková databáze
- Maximální velikost 1 instance databáze 500MB
Za necelých 60,- Kč / měsíc.
Blackbox, serverové komponenty, viewstate
Na internetu najdete plno článků podobných tomuto:
http://www.biggleszx.com/2010/01/asp-net-sucks-huge-balls-and-i-hate-it/
http://blog.jdconley.com/2009/01/10-reasons-aspnet-webforms-suck.html
Plno stížností na blackbox, page lifecykle, viewstate, postback a další věci… Předně, tyto věci se týkají pouze technologie WebForms, u MVC ani WebPages na ně nenarazíte. Na rozdíl od .NET kapacit, které plně uznávám, jako Altair Valášek, Herceg – já WebForms vůbec nefandím a budiž jim země lehká (Webformsům, ne pánům programátorům - microsoft již nadále WebForms nebude vyvíjet).
WebForms měly v sobě plno krásných věcí, které dnešní nové technologie přináší jako obrovskou novinku, kterou všichni milují. jako například Binding, komponenty atp. přesto všechno, ale s sebou přinášely pár ohromných průšvihů…
Především co se týče nějakého rozdělení práce mezi více lidí – pro webového designéra, či frontend vývojáře, bylo nějaké stylování stránek, případně nějaká jednoduchá úprava úplné peklo… Vše poměrně silný blackbox, kde v tom lepším případě, kdy jste měli k dispozici zdrojové kódy komponenty, byla úprava o tom naučit se hodně věcí... v tom horším bez přístupu ke zdrojovým kódum, přes nějaké hackování na úrovni javascriptu... Nějaké zakomponování nějaké složitější javascriptové knihovny, kde dochází k různým requestum, refreshum, redirectum atp., šlo rovněž kolikrát o pekelnou práci. Nebylo tedy nic příjemnějšího, než hledat hodinu, proč dochází v nějaké části stránky k nějakému reloadu, kde se bere postback atp. O porovnání MVC vs WebForms a proč je lepší je už nechat dožít, bude jistě ode mě také článek.
Přesto bych chtěl říci, že největším problémem WebForms je, že se microsoft snažil poskytnout vývojářům zvyklým na WinForms , podobný komfort a přístup k práci na weby – tedy chtěl vytvořit ViewBased řešení pro Action-based požadavky. Tedy web. Toto se snažil vyřešit přenesením stavu View na prohlížeč – pomocí view state... Nebudeme to dále rozpitvávat. S žádným z těchto podle mého “okovů”, se na MVC nepotkáte. Tam jsou okovy jiné, které ale obejdeme
Není multiplatformní, Open source
Troufám si tvrdit, že co se týče nějakého rozložení na platformách, začíná .NET válcovat i Javu, která poněkud usíná na vavřínech. Pokud chcete vyvíjet nativní mobilní multiplatformní aplikace a máte dostatek financí, sáhnete po Xamarinu. Xamarin používá vlastní odnož Mono a Mono je implementace .NETu. Rovněž jistě znáte Unity 3D, populární engine na všech platformách. Unity používá rovněž variantu Mona. Že je tedy .NET silně vázaný na Windows, už delší dobu není pravda. Nás ale zajímá, jak je to, co se týče webů?
Microsoft investoval hodně času a financí na to, aby byl schopný jeho framework a především webové technologie schopné jet na jiných platformách, vzniklo tedy několik variant.NET frameworku , které jsou určitou měrou schopny jet na jiných platformách.
Zatímco u WebAPI bych se už nebál použití na produkčním serveru, u MVC tomu tak není. Možnosti jsou stále poměrně omezené a ve stavu, že se na ně nelze prozatím plně spolehnout. Jsem ale přesvědčený o tom, že do roka už použitelné budou. Tyto implementace frameworku jsou rovněž open source a lze si je stáhnout.
V současné době je .NET na ostatních platformách podobně jako například PHP na Mac OS X – jde to, ale občas to bolí.
Prosím, zanechte komentář, zda vás tento seriál zaujal / zaujme. Děkuji.