ASP mvc–from zero to hero (3), vývojový stack a solution

Marian Benčat       23. 11. 2015       C#, ASP.NET MVC, .NET, JavaScript, TFS, PostSharp a AOP, Knihovny       6570 zobrazení

Vítejte u třetího dílu seriálu, který se věnuje vývoji enterprise aplikací na platformě .NET. Zatímco v minulých dílech jsme se věnovali porovnání ASP MVC s jinými frameworky, nyní si již připravíme kompletní prostředí pro vývoj webové aplikace. Jmenovitě půjde o tyto součásti:

  • Visual Studio 2013 with Update 5
  • WebEssentials
  • Visual Studio Online
  • GhostDoc
  • StyleCop
  • TypeScript
  • NUGET?
  • ReSharper*
  • PostSharp

Nejedná se pouze o části nutné, ale i tak se jim budeme věnovat, protože vám vývoj zpříjemní a často ušetří hodně práce. ReSharper je označený hvězdičkou z důvodu nutného zakoupení licence. V tomto seriálu ho ale budeme používat, abych vám předvedl co všechno umí a pokud se vám zalíbí, můžete si ho případně zakoupit. Lze samozřejmě také využít 30ti denní trial verze pro potřeby tohoto seriálu.

Visual Studio 2013 with Update 5

Visual Studio 2013 volím oproti 2015 zcela záměrně, jelikož podle mého názoru, je Visual Studio 2015 pro nás zbytečné a navíc se v něm některé věci dělají složitěji. Visual Studio 2015 se přiblížilo Linuxovému světu a tak je mnohem více provázané s NPM, Bower, JS Task Runnery atp.

Visual studio 2013 Community lze zdarma stáhnout na této adrese:

https://www.visualstudio.com/en-us/news/vs2013-community-vs.aspx

Nebudu vás zde provázet celým postupem instalace, co je ale důležité, je při instalaci – u volby součástí co se mají nainstalovat, zatrhnout vše co budeme potřebovat, tedy:

  • Microsoft Web Developer Tools
  • Microsoft SQL Server Data Tools
  • Vše ve spojitosti se C#

IDE zkusíme spustit a můžeme pokračovat dál tím, že ho opět vypnete, jelikož k instalaci dalších věcí je nutné mít Visual Studio vypnuté. Implicitní barva prostředí je bílá, pokud ale tíhnete k temné straně síly, nebo jen chcete šetřit oči, samozřejmě si lze VS přepnout do Dark módu.

Visual Studio

Web Essentials

Pokud to myslíte s vývojem webových aplikací (nebo hybridních mobilních) ve Visual Studiu opravdu vážně, tak  Web Essentials je opravdu MUST HAVE rozšíření do VS. Web Essentials toho nabízí opravdu hodně, na pár velmi zajímavých věcí se podíváme. Nejdříve ale instalace. Web Essentials naleznete na adrese níže:

http://vswebessentials.com/

Pro naše Visual Studio samozřejmě budeme potřebovat verzi 2013. Po instalaci je Web Essentials ihned připravený k použití. Co tedy umí? Vloží vám do vaší stránky lištičku:

image

Inspect / Design Mode

Design / Inspect mode vám dovoluje přímo ve stránce kliknout na libovolný prvek. Je to tedy velmi podobné například funkci Inspect v Chrome. V okamžiku, kdy kliknete na nějaký prvek ve stránce, se vám ve Visual Studio automaticky otevře soubor a prvek se vám označí ve zdrojovém kódu. Pokud navíc vyberete namísto funkce inspect, funkci design – můžete prvek přímo ve stránce jednoduše editovat, tedy jeho textovou část. Tyto změny se vám rovnou propíší i do Visual Studia.

inspect design mode

 

pitfall

Tyto funkce WebEssentials mají velké výkonostní problémy s Bundles, bude vám dokonce vytuhávat celé Visual Studio. Doporučuji tedy pro vývoj obecně  Bundles nepoužívat a  zapnout je až v okamžiku Release modu,

 

To samé platí i pro CSS stylování přes vývojářskou konzoli prohlížeče.

inspect design mode 2

 

Práce se Stylesheety

WebEssentials vám přidá pro vaše stylesheety Intellisense – a opravdu pěkný! To, že vám nabídne jednotlivé vlastnosti je už taková klasika, kromě toho vám ale i například je schopný poradit s URL, zobrazit náhledy souborů, fontů, zoptimalizovat vaše CSS, upozornit na kompatibilitu v jednotlivých browserech a další.

Práce s JavaScriptem

Folding / Unfolding, regiony a navigování  Go to definition / Find All references. Věřte, nebo ne, ale taková primitivní věc, jako je folding / unfolding JavaScriptových funkcí a CallBack Hellu, vám dokáže vyčarovat úsměv na tváři.

 

Práce s HTML

ZenCoding. Zde se nejedná o žádnou velkou novinku. Možná někteří znáte například ze Sublime Text. Jde o generování složitého XML based kódu (HTML, XAML, XML,..) pomocí velmi jednoduchého zápisu. Dejme tomu, že by jste chtěli vygenerovat klasický Bootstrap grid.

<div class="container">
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
</div>

 

Pomocí ZenCode do visual studia zapíšete pouze:

div.container>div.row*5>div.col-md-6+div.col-md-6

A za posledním znakem zmáčknete tabulátor. Zen Coding ve Web Essentials, vám automaticky zbytek vygeneruje.

Zen Coding je velmi jednoduchý: > pro child element, * pro násobení elementů, . pro class a # pro ID.

 

Zen coding

Lorem Pixel

Často potřebujete při návrhu webu vložit nějaký obrázek, který bude pokud možno v daném rozlišení a ideálně ještě k tématu stránek, aby nepůsobil jako pěst na oko. V takovém případě můžete využít tzv. Lorem Pixel, kdy si opravdu v HTML povíte, co potřebujete, zmáčknete opět tabulátor a Web Essentials zařídí zbytek.  Syntaxe je opět velmi jednoduchá:

pix-[sirka]x[vyska](-pripadnetema)

 

Tedy pokud napíši do Visual Studia například:

pix-800x600-animals

A zmáčknu tabulátor:

lorem pixel

Vygeneruje se mi link vedoucí  přesně na to, co potřebuji. Náhodný obrázek o daném rozlišení a k tématu. Zároveň mi Web Essentials ukáže i náhled (to ale dělá u každého odkazu automaticky při najetí myši)

Regiony

Někdo je miluje, jiný nenávidí. U velkého kódu vám ale regiony mohou velmi pomoci v navigaci v kódu. Obzvláště u jazyku JavaScript. Navíc regiony jdou velmi jednoduše otevřít / zavřít.

 

PRO VÍCE INFORMACÍ O WEB ESSENTIALS, PŘEJDĚTE NA HOMEPAGE

 

Visual studio online

Používáte nějaký verzovací systém, např. Subversion či GIT? Potřebujete server pro Continuous integration, případně agilní management vašeho projektu? Potřebujete load testy? Visual Studio Online je tedy nástroj přímo pro vás.

Visual studio online je online verze Team Foundaiton Serveru, který lze také do určité míry provozovat onpremise přímo u vás. Visual studio online lze založit zde:

Visual studio online

Můžete ho využívat zcela zdarma pro menší tým do 5ti lidí (+ neomezeně stake holderů). Za každého dalšího zaplatíte pak menší měsíční poplatek.

visual studio online

Během zakládání budete vyzvání k zadání názvu projektu, vybrání způsobu vedení projektu (scrum, agile, cmmi) a verzovacího systému (Team foundaton version control, git). Ve visual studio online se scrum a agile příliš neliší, přesto vám doporučuji pro začátek navolit agile a team foundation version control.

 

Co Visual Studio Online / Team foundation server umí

Visual studio online není spojené pouze s Microsoftem a .NET, podporuje obrovské množství jazyků a lze integrovat pluginy do nejrůznějších editorů jako je Visual Studio, Eclipse, Atom, Visual Studio Code.

 

Nástroje pro agilní vývoj

Visual studio online již v základu obsahuje velmi užitečné nástroje pro agilní vývoj, jako je správa úkolů, agile table (kanbanové tabule), plánování sprintů, alokace zdrojů, backlog, vytváření prognóz a sledování práce jednotlivých členů týmu.  Můžete vytvářet vlastní grafy a další věci.

Přitom když už mluvíme o správě úkolů, tak tím je myšlenko opravdu na nejvyšší úrovni, takže na nějaký pofidérní Redmin a podobné, rovnou zapomeňte.

Pro více informací o agilních nástrojích:

Visual Studio Online - agile tools

 

Version control

Kromě toho, že zde najdete vše na co jste zvyklí z jiných verzovacích systémů, zde najdete navíc například komentování kódu, diskuzi s následujícím schvalovacím procesem requestu, podmíněné větvení a další funkce. Samozřejmostí je neomezené úložiště pro vaše repozitáře zdarma.

Visual Studio Online - verison control

 

Continous integration server – sestavit, ověřit testy, nasadit

Continous integration už je dnes standardní součástí vývojového cyklu softwaru. Visual studio online je tedy opět připraveno usnadnit vám proces deploye vašeho softwaru do koncového prostředí. Nebudu zde nijak seznamovat s tím, co je continuous integration, ve zkratce pro neznalé:

Představte si, že například každou půlnoc, případně po každém commitu, Visual Studio server automaticky zbuildí váš projekt, spustí nad ním všechny testy a pokud vše v pořádku dopadlo, nasadí tuto verzi na testovací prostředí. Pokud ne, upozorní na to vývojáře, který commitnul nefunkční úpravy. Pokud došlo k nasazení na testovací prostředí, můžete si definovat, kdo stanoví, že je build skutečně v pořádku. Tato osoba pak ve webovém prohlížeči může dát pokyn, aby server nasadil tuto verzi na testovací servery zákazníka. Poté zákazník opět může potvrdit, že je verze v pořádku a server ji automaticky nasadí na ostré servery.

Toto je pouze jeden z příkladů. Vše lze nastavit a upravit podle vašeho nejlepšího svědomí a vědomí.

Samozřejmostí je také nasazování aplikací do cloudu.

 

Zátěžové testy

Poslouží vám dobře v situaci, kdy potřebujete otestovat, jak obstojí vaše aplikace vysokému vytížení. Opět lze vše nastavit, tak jak potřebujete a odměnou pro vás bude podrobná statistika. Testy lze spouštět z různých data-center po celém světě.

Visual Studio Online - load testing

 

Integrace do IDE

Všechny důležité funkce pro vývojáře jsou již implicitně integrované ve Visual Studio 2013 Community, do jiných IDE je lze doinstalovat.

ide integrace1

ide integrace 2

ide integrace 3

GhostDoc

Ghostdoc je skvělý nástroj pro automatické generování dokumentace. Tím nemám na mysli to, že napíšete /// a po zmáčknutí tabulátoru vám vygeneruje “masku” do které si musíte ručně doplnit popis metody, co znamenají jednotlivé parametry metody atp. Mám tím na mysli to, že pokud pojmenováváte alespoň trošku rozumně vaše metody, parametry a návratové hodnoty, tak vám automaticky vygeneruje opravdu pochopitelnou dokumentaci, která bude skutečně založená na pravdě.

Jak to potom tedy vypadá? Mějme jednoduchou metodu:

ghost doc 1

 

S kurzorem uvnitř zmáčkneme Ctrl+Shift+D

 

ghost doc 2

A máme zdokumentovanou metodu, takto lze samozřejmě zdokumentovat hromadně celé soubory, nebo třeba celý solution. Toto je však podmíněno zakoupením komerční verze. která vás vyjde na 25 dolarů. Za tuto cenu pro vás GhostDoc bude umět vygenerovat i kompletní Help file dokumentaci, jejíž generování lze navíc i pěkně ovlivňovat.

IntelliSense na toto samozřejmě ihned reaguje:

ghost doc 3

 

GhostDoc můžete stáhnout na této adrese:

GhostDoc free download

 

StyleCop

Stylecop je jedna z věcí, která může vývoji v týmu velmi pomoci, ale všichni ji budou nenávidět. StyleCop hlídá naprosto všechny doporučené pravidla pro psaní C# kódu a naprosto nic vám neodpustí.

Pokud tedy spustíte kontrolu StyleCopem na váš zdrojový kód, který vypadá takto:

stylecop1

StyleCop si o tom bude myslet svoje:

stylecop2

A jak tedy vypadá takový kód upravený podle StyleCopu? Není to zase tak hrozné:

stylecop3

Jedno je ale jisté.. Zatímco jako autoři určité části kódu nebudete mít StyleCop rádi, váš kolega při čtení vašeho kódu ho velmi ocení.

Best practice ohledně C# kódu a samotný StyleCop lze získat z CodePlex repozitáře na adrese:

StyleCop Codeplex

 

TypeScript

Google byl dlouhá léta považován za někoho, kdo vede vývoj webových technologií. Toto už není delší dobu pravda. Mezi přední firmy, které posouvají webový vývoj někam dále patří kupodivu Microsoft a né-kupodivu Facebook. Microsoft se svým TypeScriptem, WinJS a Reactive Extensions (i pro JS). Facebook se svým Reactem a Fluxem.

Jak jste si jistě už všimnuli, nemám rád JavaScript, považuji ho společně s PHP za největší zla, které vznikly v IT světě (předhání je snad jen Flash). Z toho důvodu se pokusíme největším nešvarům JavaScriptu vyhnout a proto budeme používat TypeScript a později AngularJS pro frontend. Angular budeme používat ze začátku v jeho čisté formě, vzápětí si však ukážeme jak ho celý postavit na TypeScriptu a ve finále dokonce i to, jak si velkou část kódu nechat vygenerovat na základě C# kódu pomocí T4 template.

Co nám přinese TypeScript?

Typescript je superset JavaScriptu, lze v něm tedy psát čistý JavaScript. Pouze blázen by ale používal standardní prototypovou dědičnost, když může používat Objektově Orientovaný Přístup – tedy má k dispozici standardní třídy, dědění, interface a implementaci interfaceu. Zároveň má k dispozici silné typování čehokoliv. Toto je výhoda především z toho důvodu, že dynamicky typovaný jazyk je naprosto nadčasový v jednom ohledu. Bylo to zlo, je to zlo a zlo to i vždy bude. Ušetří pár minut času a přinese hodiny a hodiny debugování a studování dokumentace společně s miliardou střelení se do paty.

TypeScript se v rámci VisualStudio 2013 compiluje automaticky při uložení a to buďto do současného ES5 JavaScriptu, nebo do ES6, který zatím je otázkou budoucnosti.

Typescript má pěknou syntaxi a jako .NETář / JavaScripter se jeho syntaxi naučíte za hodinu na této adrese:

TypeScript Handbook

TypeScript nainstalujete do Visual Studia z odkazu výše kliknutím na Download->VS2013.

 

instalace typescript

 

info

Po instalaci bude potřeba ještě nastavit některé věci, aby vám TypeScript fungoval tak, jak potřebujete.

 

Při přidání prvního .ts souboru do solutionu ho Visual Studio detekuje a nabídne vám stáhnutí tzv. typing souborů. Tyto soubory slouží k přidání “typovosti” ke standardním JavaScript knihovnám. Zvolte ano.

instalace typescript 2

Vyskočí vám Nuget manager o kterém si povíme později. Později tedy NuGetu využijeme ke stáhnutí definicí k Angularu, jQuery atp.

instalace typescript 3

Prozatím můžete toto okno zavřít.

Pokud uložíte TypeScript soubor s nějakým TypeScript kódem, vygeneruje se vám automaticky .js soubor. Tento soubor není implicitně vidět, je nutné zobrazit soubory, které nejsou součástí solution:

instalace typescript 4

Pokud vám VisualStudio automaticky negeneruje tyto soubory, budete muset zajít do nastavení (Tools->Options) a některé věci donastavit.

instalace typescript 5

Pokud máte nainstalované Web Essentials, může se vám hodit ještě náhled vygenerovaných souborů:

instalace typescript 5

instalace typescript 6

Pokud máte nainstalované WebEssentials, můžete rovněž přetáhnout soubor .ts ze Solution Manageru do html a vloží se vám automaticky link na .js soubor.

instalace typescript 7

NUGET

Jedná se o balíčkovací systém pro Visual Studio. Jedná se tedy o alternativu pro Bower, NPM a podobné balíčkovací systémy. Pomocí NUGETu můžete do vašeho projektu importnout jakoukoliv dostupnou knihovnu, nezáleží zda jde o knihovnu pro backend, nebo frontend vaší aplikace. Nuget spustíte nejlépe pomocí pravého menu na projektu:

Nuget 1

Jednotlivé knihovny lze poté instalovat i pomocí NuGet package console.

Nuget 2

Přes consoli lze také dělat i další věci, například povolovat migrace, updatovat balíčky, kontrolovat závislosti a další operace.

 

ReSharper

O ReSharperu by šel napsat celý článek, nebo spíše celý seriál. Přesto že se jedná o placený produkt a nepatří mezi nejlevnější, silně vám doporučuji použít trial verzi a tak si ho celý vyzkoušet. Mohu dát ruku do ohně za to, že si ho zamilujete.

Nebudu zde tedy popisovat co vše ReSharper umí, ale budu ho často používat, budete si tedy moci udělat představu, k čemu všemu je dobrý. Tímto bych chtěl oznámit, že častou součástí tohoto seriálu budou videozáznamy.

Pro více informací o ReSharperu vás tedy prozatím odkáži na oficiální stránky, kde si můžete stáhnout i trial verzi:

ReSharper homepage

 

S dovolením autora přikládám záznam skvělé prezentace o ReSharper z letošního MS Festu:

 

 

PostSharp

Aspektově orientované programování (AOP). K čemu je to dobré? Dám vám jednoduchý příklad, na kterém si to již budete umět představit. Dejme tomu, že může u některých z vašich metod nastat nějaká výjimka. Například u takovéhoto kódu:

public void StoreName(string path)
   {
       File.WriteAllText( path, string.Format( “{0} {1}”, this.FirstName, this.LastName ) );
   }

 

Pokud budete chtít tento kód ošetřit, obalíte volání File.WriteAllText() Try…catchem a v catch{} tuto situaci například logovat do konzole.  Todle jistě není problém, ale budete psát toto u každé z metod, ve které může dojít k výjimce? Zde přichází na pomoct AOP.

 

Pomocí PostSharpu si napíšeme jednoduchý attribute:

[Serializable]
public class PrintExceptionAttribute : OnExceptionAspect
{

    public override void OnException(MethodExecutionArgs args)
    {
        Console.WriteLine(args.Exception.Message);
    }
}

 

A jakoukoliv naši metodu, kde budeme chtít odchytávat Exception a logovat ji, odekorujeme naším atributem:

[PrintException]
   public void StoreName(string path)
   {
       File.WriteAllText( path, string.Format( “{0} {1}”, this.FirstName, this.LastName ) );
   }

Toto je pouze malá ukázka. Pomocí AOP si můžete ušetřit opravdu extrémní množství kódu, což pocítí především programátoři ve WPF, kde se pomocí PostSharpu ochudí o neustálé ruční psaní (nebo generování balastního přebytečného kódu)  volání metody OnPropertyChanged(). K postsharpu se ještě dostaneme. Prozatím si nainstalujeme jeho EXPRESS verzi z odkazu:

PostSharp download

 

Video shrnutí, založení solutionu, popis

 

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Mohlo by vás také zajímat

Jednoduchý scheduler v .NETu

Asi to znáte – máte nějaký složitější systém na zpracování velkého objemu dat a čas od času potřebujete vykovat nějakou automatizovanou údržbu – typicky smazat všechny položky starší než několika dní. Možností, jak toho dosáhnout, je hodně. Snažil jsem se vymyslet něco jednoduchého a efektivního.

představení nového seriálu o ASP .net MVc - from zero to hero

ASP MVC–from zero to hero, omluva

 

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

Dalsi diel?

Dobry den, kedy mozeme ocakavat dalsi diel? Dakujem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

dnes, nebo zítra.

MB

nahlásit spamnahlásit spam 0 odpovědětodpovědět

MVC, Controllers, Models - Best practices

Hezký večer,

chtěl bych se optat na best practices, co se týče rozdělení aplikace na Controllery a rozvětvení modelů. Tedy, co by měl jeden jeden Controller obsluhovat ? Jednu stránku ? Stránky týkající se kontextu dané věci (např. list/edit/new). Setkal jsem se s problémem, že jeden Controller obsluhoval příliš mnoho věcí, ačkoli se to, víceméně, jednoho kontextu týkalo. Problém nastal v testování, kdy pro vytvořeni Controlleru bylo potřeba mockovat velké množství závislostí. Čili dotaz zní, máte nějaký klíč jak Controllery členit ? Lépe více, méně, jinak ?

Dále mě zajímá jaký best practice volíte při větvení ViewModelů. S praxe už mi tak nějak vyplynulo, že není dobré všechny cpát do složky "Models". Je třeba dalšího větvení. Napadá mě např. per Controller (Models/XxxController). Nebo per Controller a rozčlenit ještě na ViewModels a POSTModels (Models/XxxController/View , Models/XxxController/POST). Konkrétně se jedná o projekt, kde počítáme se stovkami modelů. Co vy na to ? Všiml jsem si poznámky ve videjku, že se k tomuto tématu ještě vrátíte, tak jestli odpověď máte rozpracovanou, dotaz ignorujte. :)

PS: Docela mě překvapilo, že commitujete nuget balíčky, když to ani není nutné a dá se tomu na dva kliky předejít (napadá mě jen jeden důvod proč a to, že provozujete vlastní nuget server a nechcete externistům na něj dávat přístup). Místa na disku není nikdy nazbyt, obzvláště pokud provozujete vlastní TFS. :)

Díky za případný komentář.

Příjemný zbytek dne,

R.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

tak tedy postupně.

 Tedy, co by měl jeden jeden Controller obsluhovat ? Jednu stránku ? Stránky týkající se kontextu dané věci (např. list/edit/new). Setkal jsem se s problémem, že jeden Controller obsluhoval příliš mnoho věcí, ačkoli se to, víceméně, jednoho kontextu týkalo. Problém nastal v testování, kdy pro vytvořeni Controlleru bylo potřeba mockovat velké množství závislostí.

Rozdělení controlleru je vždy na uvážení, tedy případ od případu. Určitě by v controlleru měly být pouze věci, které se ho týkají. Lze to ale rozdělit i do více controlleru pomocí několika různých způsobů - například ChildActions.

Je také často dobré mít třeba zvlášť controller, který vrací view (standardní MVC controller) a controller, který vrací DATA - obzvláště pak například pro XHR requesty.

Osobně používám kombinaci MVC Controlleru, Web API controlleru a čas od času i ODATA Controlleru pro gridy.

Je dobré mít takto "tahání" dat bokem v případě, že by jste například chtěl mít více klientů (web, mobile, SignalR atp).

Ohledně těch závislostí... Pokud používáte IOC Container a dependency injection, tak by vám todle "mockupování závislostí" nemělo dělat problém, jelikož prostě máte 2 kontejnery:

1) Normal

2) Test

V Normal máte tedy všechny ostré závislosti a v Test máte mockupy.. pro testy tedy používáte ten Test container... Je vám pak víceméně jedno, zda má controller 2 závislosti, nebo 50.. A i k tomuto se dostaneme.

Dále mě zajímá jaký best practice volíte při větvení ViewModelů. S praxe už mi tak nějak vyplynulo, že není dobré všechny cpát do složky "Models". Je třeba dalšího větvení. Napadá mě např. per Controller (Models/XxxController). Nebo per Controller a rozčlenit ještě na ViewModels a POSTModels (Models/XxxController/View , Models/XxxController/POST). Konkrétně se jedná o projekt, kde počítáme se stovkami modelů. Co vy na to ? Všiml jsem si poznámky ve videjku, že se k tomuto tématu ještě vrátíte, tak jestli odpověď máte rozpracovanou, dotaz ignorujte. :)

Zde asi nedokáži takto přímo odpovědět... VM jsou ale pouze classy, jako každá jiná, lze tedy použít dědění a kompozice navíc ve spojení s Include/Exclude dekorací u Controlleru... Právě proto, že je to normální třída, nejste nikterak omezen, jak si to vymyslíte.

Každopádně, ViewModely obsahují často i různé aspekty na základě kterých se to pak může různě validovat, vykreslovat (UI Hint) atp. Pokud si tedy chcete ušetřit, můžete pro nějaké 3 View mít 1 VM a v případě potřeby "forknout", nebo naopak.. si práci zezačátku přidělat a pak upravit jeden.

Ohledně commitování ve videu. Opravdu jsem to tam neřešil (zmínil jsem, že můžeme určité věci excludnout) a prostě jsem commitnul vše. V praxi používám u SVN (fuj) global:ignores na bin/bld/obj/packages atp. To samé jde samozřejmě v TFSVC.

Pokud to chcete probrat podrobněji kontaktujte mě přes email:

marian.bencat(at)live.com

Hezký večer.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Znovu dobrý večer,

překvapilo mě, že jste odpověděl zrovna, kdy měl náš "pán prezident" sváteční proslov :-D. Takže doufám, že se nebudete zlobit, když budu trochu prudit.

ad Controllery)

Trošku jsem doufal, že k tomu máte nějaký univerzální klíč (možná mi chybí trochu argumentace, proč to děláte tak a tak), ale což, refactorovat to jde vždy.

Co se týče závislostí, kontejner nekontejner, pokud má Controller (nebo obecně třída) 50 resp. 15+ závislostí, alarmuje mě to, že je něco špatně.

ad Commitování)

Chápu, nicméně začátečníky takový detail může zmást (stejně jako mě) a v důsledku vést k worst practice. :-)

Hezký zbytek svátku,

R.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Popravdě na takto obecnou otázku bez prohlídky "jak to tam tedy máte", asi nejsem schopný lépe odpovědět a něco moc vymýšlet.

Ohledně toho commitování a věcí, co by mohly být zavádějící pro začátečníky, se polepším :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

DObrý den, omlouvám se, omylem jsem vás zcenzuroval.. to tlačítko je tam prostě blbě dané :-)

Hezký večer,

Vaše odpověď mi stačí :-). Víceméně jste mi jen potvrdil to, co jsem si myslel. Konkretizovat bohužel nemohu.

Ale abych jen nekritizoval.

Díky za skvělou práci, kterou zde provádíte. Váš seriál zase jednou oživil .netportal.

Těším na další díl :-).

Kódu zdar,

R.

Další díl už se doděává.

MB

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokračování

Díky za tento seriál, jen doufám, že to nedopadne jako většina článků tady. Udělá se teoretický úvod a pak se na to autor vykašle, protože je to moc práce. Jinak si myslím, že co se týká MVC, něco podobného je určitě potřeba. Jak už bylo popsáno, žádné rozumné ucelené informace o MVC na webu neexistují. Držím palce ať to dotáhnete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji. Práce to je opravdu hodně a jeden díl se vyšplhává třeba k 10ti hodinám čisté práce. Očekávám tedy, že mi to sebere opravdu hodně času. Na druhou stranu, mám dobrou motivaci. Tím je nejen sdílení know-how s ostatními a mými kolegy, kterým to nemusím předávat zvlášť, ale mám zde i možnost získat i nějaké znalosti sám v podobě reakcí.

MB

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

ASP.NET MVC Solution Architecture – Best Practices

Chcel by som sa spytat, ci v seriali bude zmienka aj o niecom takomto: http://chsakell.com/2015/02/15/asp-net-m...

To znamena rozdelenie solution do viacerich vrstiev aj s popisom.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

toto jsou právě věci o kterých ten seriál má být především. Tedy bude zaměřený především na věci jako je SOC, vícevrstvá aplikace, enteprise implementace jednotlivých vrstev. Zároveň tam bude právě i rozbor Rich Domain Modelu (který úplně kupodivu nesplňuje SOLID) a Aenemic domain modelu (který SOLID splňuje plně ale velmi kupodivu nectí moc OOP a jde spíše imperativní cestou).

K tomuto se tedy dostaneme, bohužel to opravdu nějakou dobu potrvá.

Co se týče odpovědi k článku..

1) Pravděpodobně nebudeme používat Autofac, ale Unity/ Castle Windsor

2) Repozitar budeme implementovat trošku jinak a k němu si přihodíme alternativu v podobě Query Objectu

3) k UnityOfWork se pokusime přistoupit TAKE i jinak< než jak je to tam implementováno, jelikož samotný EntityFramework už je UnityOfWork

4) Z běžného prohlédnutí (5vteřin) vidím, že tam vrací z repozitáře přímo entity a né DTO(pokud tedy koukám správně), todle je špatně. Nic kromě repozitářů by už dále nemělo vědět o uložení dat (tedy nemělo by ani vědět o nějakých entitách z entity frameworku), na úrovni repozitářů by tedy mělo být mapování na DTOčka.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Samozrejme ten clanok bol len priklad, ono dostat sa k tymto informaciam je dost problematicke aj v anglictine a nie v cestine resp. slovencine.

Cize dobra praca, len tak dalej.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte pravdu. Přestože lze takovéto informace dát dohromady z XY knížek a článků, sjednocené all-in-one to není pořádně nikde ani v AJ, natož v češtině. To je důvodem, proč jsem se rozhodl pro tento seriál (viz. moje motivace z prvního dílu). Sledujte i nadále tento seriál a dostaneme se k tomu.

Hezký den,

MB

nahlásit spamnahlásit spam 0 odpovědětodpovědět

StyleCop & VS 2015

Ještě ke StyleCopu, pokud vím už se jeho "původní" verze nevyvíjí - teď se všechno přepisuje pro Roslyn a práve VS2015, přidávají se i nové funkce a varování

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

zajímavá informace. Todle jsem nevěděl. Děkuji. Každopádně, prozatím mám své dobré důvody, proč nechci používat VS2015, takže mi nezbývá než-li využívat samostatného StyleCopu.

Pevně věřím ale tomu, že za rok už nebudu mít proti VS2015 nic, jisté věci budou upraveny / odstraněny, nebo bude k dispozici alternativní přístup a pak budu používat VS2015.

V současné době mi ale velmi nevyhovuje mít k Visual Studio 5 miliard javascriptových toolu, 5 miliard JSON konfiguračních souborů a vše dělat mnohonásobně složitě než je nutné.

Chápu, že todle je kvůli tomu, aby to běželo i mimo VS a bylo zcela nezávislé na platformě.. ale .NET core není v současné době zrovna použitelný a tak nevidím ani důvod, proč se trápit s tím ostatním.

Hezký večer a děkuji za komentář

nahlásit spamnahlásit spam 0 odpovědětodpovědět

StyleCop

Mimochodem styleCop se dá nastavit že místo warnings delá errory :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vím o tom, ale je to potom už příliš děsivé :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím, že pokud bych to asi v současné chvíli dal jako součástí buildu (přidal jako building target), tak mě asi kolegové ukřižují,.. ale určitě pokud s tím všichni souhlasí, tak je to věc k nezaplacení. Takže za mě +1

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback