Aan de slag met MVC4

Door diabolofan op vrijdag 30 augustus 2013 19:00 - Reacties (13)
Categorie: MVC 4, Views: 2.780

Inleiding
Kleine voorstelronde:
Ik ben, zoals hierboven te zien is, op Tweakers actief onder de gebruikersnaam diabolofan. Deze gebruikersnaam is ontstaan uit mij hobby diaboloën, maar dat staat momenteel op een héél laag pitje :) Ben verder 20 jaar, studeer aan De Haagse Hogeschool in Delft, en doe daar de opleiding Technische Informatica (4e jaars). Als bijbaan werk ik als webontwikkelaar bij een klein adviesbureau met een programmeerafdeling.

Bloggen is nieuw voor me, dus vertel het gerust als het weinig interessant is, of als ik wat beter me best moet doen oid :)

Inmiddels kan ik denk ik wel zeggen dat ik aardig wat ervaring heb met het bouwen van websites, en talen en technieken die daarbij komen kijken. Zoals ook bijvoorbeeld met C#, en van voornamelijk met ASP.Net Web applicaties. Hierbij maakte ik alleen altijd gebruik van een soort lagenstructuur (Frontend-laag, Service-laag, Repository-laag), maar dus niet met MVC.

Met PHP heb ik hier al wel mee gewerkt, en heb aardig veel gespeeld met CakePHP en Yii, wat mij erg goed beviel. Het lijkt me interessant en verstandig om dit ook bij .NET te gaan gebruiken, omdat MVC momenteel toch wel de standaard is.

Het plan
Om een goede start te maken maak ik gebruik van deze tutorial. Vooralsnog bevalt dit heel goed, en ik hoop hier de basis goed onder te knie mee te krijgen.

Als (prob/l)eerprojectje wil ik een klein CMS op gaan zetten om allereerst mijn eigen websites mee te gaan beheren. Hierbij wil ik voor de 1e iteratie het volgende voor elkaar hebben:
- Gebruikersbeheer
- Paginabeheer
- Menuitembeheer

Om ook enigszins in dit priveprojectje de orde te handhaven leek het mij verstandig om een klassemodel te maken. :) Reacties daarop zijn uiteraard van harte welkom!

http://www.webdesignbrandwijk.nl/tweakblog/Classdiagram.png

Voortgang
Inmiddels dus wat ervaring opgedaan met het Entitiy Framework. De scaffolding kende ik al van Yii (waar ik hele mooie templates zelf bij had gemaakt, maar wat ik hier dus mis) waarbij ik moest constateren dat die net even wat minder handig dingen genereert dan Yii. De .shtml views met Razor moet ik wel even aan wennen, maar dat komt hopelijk wel goed.

Een beslissing die ik inmiddels gemaakt heb is het gebruiken van een DbMigrationsConfiguration, om zo ook kennis te maken met de Package Manager, en dus ook dit gedeelte (database updaten) op een professionelere manier te doen.

Inmiddels heb ik de CRUD operaties van de PageController en MenuItemController ongeveer af. Een online demo komt eraan, zodat jullie ook lekker kunnen genieten van mijn eventuele faaltjes of eigenaardigheden.

Verwachting
Graag hou ik jullie op de hoogte van hoe het project vordert. Hierbij zou ik het erg leerzaam vinden wanneer er het nodige commentaar wordt gegeven op beslissingen, of bijvoorbeeld gewoon al een naamgeving van een property in een klasse. Hopelijk komen er, voor mij maar hopelijk ook voor andere, leerzame discussies op gang. Wanneer er nog andere tips/trucs/handig dingen zijn dan hoor ik het graag.

Groeten!

Volgende: MVC4, nieuwe ontwikkelingen, nieuwe uitdagingen! 09-'13 MVC4, nieuwe ontwikkelingen, nieuwe uitdagingen!

Reacties


Door Tweakers user Mark_L, vrijdag 30 augustus 2013 19:28

Van mij zouden er meer van dit soort blogs mogen zijn op Tweakers. Er zijn maar weinig programmeerblogs.

Leuk om te lezen hoe je aan de slag gaat met MVC. Nieuwe technieken leren is altijd leuk!
Als ik je een tip mag geven: kijk gelijk ook eens naar WebApi.

Ik omschrijf WebApi altijd als 'MVC zonder de views'. Met WebApi kun je gemakkelijk (JSON) webservices maken. Als je dat vervolgens combineert met een Javascript applicatie framework als AngularJS krijg je hele mooie applicaties.

Het hangt trouwens geheel van je situatie (en beschikbare expertise) af wat de beste oplossing is. Over het algemeen zou ik zeggen: websites MVC, webapplicaties AngularJS + webservice.

In ieder geval succes. Ik blijf je blog volgen!

Door Tweakers user Jogai, zaterdag 31 augustus 2013 00:24

Leuk blog!

Je datamodel vind ik niet zo overzichtelijk (de lijntjes). Ook zou ik de 4 laatste properties niet opnemen in de tabellen zelf. Liever een aparte History tabel, zoals:
|History|
|ID:int|
|Table:string|
|TableID:int|
|Operation:string| (of enum met C/R/U/D)
|UserName:string| (zonder relatie, zodat je oude gebruikers nog wel in je history hebt)
|Date:datetime|

Als je toch met de packagemanager aan de gang gaat:
Bouw je menu op met MvcSiteMapProvider: Even een dynamicnodeprovider schrijven en je kan met Html.Action je menu's neerzetten of een sitemap genereren.

En gebruik de SimpleMembershipProvider, neemt je een hele hoop werk uit handen voor usermanagement. Uiteraard moet je nog wel de pagina's eromheen bouwen.
Mark_L schreef op vrijdag 30 augustus 2013 @ 19:28:
Het hangt trouwens geheel van je situatie (en beschikbare expertise) af wat de beste oplossing is. Over het algemeen zou ik zeggen: websites MVC, webapplicaties AngularJS + webservice.
Als je applicatie heel veel echt crud moet doen dan zou ik toch gewoon MVC pakken. Je kan dan lekker scaffolden met (aangepaste) templates. MVC kan ook prima een JSONresult teruggeven dus mixen kan altijd.

Door Tweakers user F.West98, zaterdag 31 augustus 2013 02:10

Jogai schreef op zaterdag 31 augustus 2013 @ 00:24:
Leuk blog!

Je datamodel vind ik niet zo overzichtelijk (de lijntjes). Ook zou ik de 4 laatste properties niet opnemen in de tabellen zelf. Liever een aparte History tabel, zoals:
|History|
|ID:int|
|Table:string|
|TableID:int|
|Operation:string| (of enum met C/R/U/D)
|UserName:string| (zonder relatie, zodat je oude gebruikers nog wel in je history hebt)
|Date:datetime|
Even commentaar:
History tabel is een leuk idee, maar wel met User koppeling, en in de user tabel een extra property 'removed' oid. Dan bestaat de user nog wel, maar is die niet zichtbaar in de lijsten (gewoon daarop filteren). Dan heb je ook alle pages van die user nog ;)
Als je toch met de packagemanager aan de gang gaat:
Bouw je menu op met MvcSiteMapProvider: Even een dynamicnodeprovider schrijven en je kan met Html.Action je menu's neerzetten of een sitemap genereren.
Die kende ik nog niet!
En gebruik de SimpleMembershipProvider, neemt je een hele hoop werk uit handen voor usermanagement. Uiteraard moet je nog wel de pagina's eromheen bouwen.
Dat is heel erg veel straight-forward en soms redelijk saai, om alvast te waarschuwen :+
Het is inderdaad wel heel handig, ook automatisch dingen verbergen voor usergroups en meldingen tonen/loginpopup tonen voor 'verboden terrein'.

Door Tweakers user diabolofan, zaterdag 31 augustus 2013 19:21

Allereerst hartelijk bedankt voor jullie feedback!
Mark_L schreef op vrijdag 30 augustus 2013 @ 19:28:
Ik omschrijf WebApi altijd als 'MVC zonder de views'. Met WebApi kun je gemakkelijk (JSON) webservices maken. Als je dat vervolgens combineert met een Javascript applicatie framework als AngularJS krijg je hele mooie applicaties.

Het hangt trouwens geheel van je situatie (en beschikbare expertise) af wat de beste oplossing is. Over het algemeen zou ik zeggen: websites MVC, webapplicaties AngularJS + webservice.
Wanneer iets een website is en wanneer iets een webapplicatie wordt is denk ik een aardig grijs gebied. Overdreven veel CRUD zal ik niet krijgen, maar ook geen paginas met ingewikkelde html. Die webservices zou je dan neem ik aan ook direct (wanneer je het goed opzet) kunnen gebruiken voor de JSON-requests vanaf Android/iPhone-apps?
Jogai schreef op zaterdag 31 augustus 2013 @ 00:24:
Liever een aparte History tabel, zoals:
|History|
|ID:int|
|Table:string|
|TableID:int|
|Operation:string| (of enum met C/R/U/D)
|UserName:string| (zonder relatie, zodat je oude gebruikers nog wel in je history hebt)
|Date:datetime|
De toegevoegde waarde zie ik hier niet helemaal van. Ik denk dat het makkelijker is om de User en Page klasse gewoon een Active field te geven, waardoor ik dus, zoals F.West98 ook zegt, heel gemakkelijk kan filteren.
Jogai schreef op zaterdag 31 augustus 2013 @ 00:24:
Als je toch met de packagemanager aan de gang gaat:
Bouw je menu op met MvcSiteMapProvider: Even een dynamicnodeprovider schrijven en je kan met Html.Action je menu's neerzetten of een sitemap genereren.

En gebruik de SimpleMembershipProvider, neemt je een hele hoop werk uit handen voor usermanagement. Uiteraard moet je nog wel de pagina's eromheen bouwen.
Ik ga er mee aan de slag! Thanks!

Door Tweakers user anti-rsca, zaterdag 31 augustus 2013 21:44

Mooi, mooi, meer van dat!

Door Tweakers user Jogai, zaterdag 31 augustus 2013 22:44

F.West98 schreef op zaterdag 31 augustus 2013 @ 02:10:
[...]

Even commentaar:
History tabel is een leuk idee, maar wel met User koppeling, en in de user tabel een extra property 'removed' oid. Dan bestaat de user nog wel, maar is die niet zichtbaar in de lijsten (gewoon daarop filteren). Dan heb je ook alle pages van die user nog ;)

[...]

Die kende ik nog niet!

[...]

Dat is heel erg veel straight-forward en soms redelijk saai, om alvast te waarschuwen :+
Het is inderdaad wel heel handig, ook automatisch dingen verbergen voor usergroups en meldingen tonen/loginpopup tonen voor 'verboden terrein'.
User koppeling in stand houden is idd vrij makkelijk te doen op die manier. Niets op tegen.

SimpleMembership is misschien saai, maar meestal is dat ook niet het doel van je project, het is een middel dus prima omdat lekker simpel te houden.
diabolofan schreef op zaterdag 31 augustus 2013 @ 19:21:
Allereerst hartelijk bedankt voor jullie feedback!


[...]


Wanneer iets een website is en wanneer iets een webapplicatie wordt is denk ik een aardig grijs gebied. Overdreven veel CRUD zal ik niet krijgen, maar ook geen paginas met ingewikkelde html. Die webservices zou je dan neem ik aan ook direct (wanneer je het goed opzet) kunnen gebruiken voor de JSON-requests vanaf Android/iPhone-apps?


[...]


De toegevoegde waarde zie ik hier niet helemaal van. Ik denk dat het makkelijker is om de User en Page klasse gewoon een Active field te geven, waardoor ik dus, zoals F.West98 ook zegt, heel gemakkelijk kan filteren.


[...]


Ik ga er mee aan de slag! Thanks!
Ja, je services kan je ook gebruiken voor externe doeleinden.

Toegevoegde waarde vind ik vooral dat je tabellen vooral data bevatten wat functioneel bijdraagt aan je applicatie. Het stukje logging doe je dan in een andere tabel. Al dan niet relaties in stand houden of niet is idd minder belangrijk. Je ziet vaak dat dingen niet weggegooid worden maar inactief worden gezet. Dat is vaak verstandiger om te doen.

De MVCsitemapprovider heeft ook een aantal handige seo features. voor een CMS toch niet onbelangrijk. zie http://www.shiningtreasur...approvider-4-seo-features

Door Tweakers user neographikal, zondag 01 september 2013 09:53

Wat je ook kunt doen:
  • Bekijk nhibernate eens als alternatief voor EF.
  • In plaats van een membershipprovider fixen kun je ook botweg zelf met WIF aan de slag gaan. Zo heb ik Simpleauthentication (zie github) gebruikt met claims based authenticatie ( https://github.com/PureKrome/WorldDomination.Security ). Heerlijk simpel en lekker veel controle :)
MVC4 icm alle mogelijkheden die er zijn is heel even doorbijten, maar ik ben er inmiddels erg happy mee. Hiervoor heb ik veel in php geprutst met Zend en Symfony, maar .net icm mvc geeft me voor m'n gevoel een veel prettigere ontwikkelomgeving. Wat ook leuk spul is: RavenDB als alternatief voor de rdbms'en :)

Door Tweakers user s.stok, zondag 01 september 2013 13:01

Mark_L schreef op vrijdag 30 augustus 2013 @ 19:28:
Van mij zouden er meer van dit soort blogs mogen zijn op Tweakers. Er zijn maar weinig programmeerblogs.

Leuk om te lezen hoe je aan de slag gaat met MVC. Nieuwe technieken leren is altijd leuk!
Als ik je een tip mag geven: kijk gelijk ook eens naar WebApi.

Ik omschrijf WebApi altijd als 'MVC zonder de views'. Met WebApi kun je gemakkelijk (JSON) webservices maken. Als je dat vervolgens combineert met een Javascript applicatie framework als AngularJS krijg je hele mooie applicaties.

Het hangt trouwens geheel van je situatie (en beschikbare expertise) af wat de beste oplossing is. Over het algemeen zou ik zeggen: websites MVC, webapplicaties AngularJS + webservice.

In ieder geval succes. Ik blijf je blog volgen!
De View is een begrip geen template of iets, dus JSON teruggeven als responce is ook gewoon een View. ;)

Echt MVC (zoals het in detail is beschreven) is niet echt mogelijk voor een web pagina.
Volgens MVC moet de Model 'laag' de View op de hoogte brengen van een verandering, maar omdat de View word gemaakt en teruggestuurd is dat niet langer het geval.

Daarom is MVC voor websites veelal moeilijker uit te leggen en te begrijpen dan dat het in een client applicatie word gebruikt. Voor client-side JavaScript is MVC daarin tegen weer prima geschikt omdat de UI live kan worden bijgewerkt.

Ik heb zelf gekeken naar AngularJS maar de documentatie was toen nog erg mager :/ er zijn ook andere alternatieven zoals Backbone.js en Spine.js welke mij persoonlijk meer aanspreken.

Door Tweakers user mebrein, zondag 01 september 2013 13:54

Leuk om te lezen hoe je probeert zelf een CMS te maken. Dit soort vingeroefeningen zijn altijd heel leerzaam. Maar als je verder wilt, en productief wilt worden, waarbij je zelf nog steeds van alles kan programmeren. Kijk dan eens naar het Umbraco CMS.

Umbraco is een open source CMS met een écht leuke communitie, bestaande uit creatieven en techneuten. Ik lees hier op Tweakers weinig over Umbraco. Eigenlijk is dat best jammer..... want dit CMS lééft!!!

De laatste 6.x release is fantastisch en volledig MVC, inclusief WebAPI, dependency injection/IOC. Je wordt aangemoedigd om petapoco te gebruiken, want die is supersnel en supersimpel. Maar natuurlijk kan autofac ook, dat is het leuke. Gebruik gewoon wat je zelf handig vindt.

Op dit moment wordt er ontwikkeld aan versie 7 aka 'Belle'. Hierin wordt de gebruikerservaring van de content editors aanzienlijk verbeterd met de laatste AngularJS technologie. Als je wilt leren hoe MVC te combineren met de laatste javascript technieken dan is NU het moment om aan te haken :-). Lift mee op de kennisgolf! Hier een online sessie van Per Ploug Hansen .

Door Tweakers user diabolofan, maandag 02 september 2013 13:23

neographikal schreef op zondag 01 september 2013 @ 09:53:
Wat je ook kunt doen:
  • Bekijk nhibernate eens als alternatief voor EF.
  • In plaats van een membershipprovider fixen kun je ook botweg zelf met WIF aan de slag gaan. Zo heb ik Simpleauthentication (zie github) gebruikt met claims based authenticatie ( https://github.com/PureKrome/WorldDomination.Security ). Heerlijk simpel en lekker veel controle :)
MVC4 icm alle mogelijkheden die er zijn is heel even doorbijten, maar ik ben er inmiddels erg happy mee. Hiervoor heb ik veel in php geprutst met Zend en Symfony, maar .net icm mvc geeft me voor m'n gevoel een veel prettigere ontwikkelomgeving. Wat ook leuk spul is: RavenDB als alternatief voor de rdbms'en :)
NHibernate gebruikte ik altijd al bij ASP.Net website die ik maakte, dus het leek me nu wel goed om EF te leren.

Het is inderdaad wel even doorbijten. De handleidingen van packetten die je via NuGet kunt krijgen (bijv MvcSiteMapProvider) zijn nou ook niet allemaal zo duidelijk... Ligt waarschijnlijk aan mijn onkunde, dus hoop dat de volhouder wint :)
mebrein schreef op zondag 01 september 2013 @ 13:54:
Leuk om te lezen hoe je probeert zelf een CMS te maken. Dit soort vingeroefeningen zijn altijd heel leerzaam. Maar als je verder wilt, en productief wilt worden, waarbij je zelf nog steeds van alles kan programmeren. Kijk dan eens naar het Umbraco CMS.
Ziet er goed uit, ga ik ook maar eens even proberen.. Maar daar leer je ook nog wel goed MVC van nog?

Door Tweakers user CodeCaster, woensdag 04 september 2013 09:20

Umbraco en productief zijn hebben weinig met elkaar te maken, net als Umbraco en MVC. Je moet precies op hun manier programmeren, alle vrijheid van MVC ben je kwijt. Leuk om erbij te leren wanneer je MVC aardig onder de knie hebt, maar het ermee leren is niet aan te raden. Umbraco heeft inderdaad een levendige community die graag de meest basale vragen beantwoordt, maar de documentatie en support zijn om te huilen, tot je ervoor betaalt.

Door Tweakers user thedjdoorn, maandag 09 september 2013 17:43

Intressant! Maar je studeert in Delft? Bevalt dat een beetje? Ikzelf moet binnen anderhalf jaar een studie hebben gekozen, dat wordt gewone informatica in Utrecht. Mijn oorspronkelijke plan was om Technische Informatica te doen, maar ik ben verleid door het vak Gametechnologie. Om mij alsnog aan mijn oude plan te houden ben ik van plan om bij m'n minor wel Technische Informatica te doen. Ik ga er dit jaar sowieso wel even langs op een open dag (is verplicht, en je moet toch iets :P ), maar raad je Delft aan?

Door Tweakers user diabolofan, zaterdag 14 september 2013 12:28

Ik studeer in Delft op de Haagse Hogeschool ja. Bevalt goed, en de studie ook. :)

Ik heb als minor dit jaar Game Development and Simulation gekozen, dit gaat ook over Gametechnologie (wat oa aan bod komt: vectoren, matrixen, modelleren, ogrekit), en is inderdaad erg interessant. Zou wel even onderzoeken wat 'Gametechnologie' dan precies inhoud bij die Informatie studie, zodat het niet tegen gaat vallen omdat ze er niet diep genoeg in door gaan.

Reageren is niet meer mogelijk