Date post: | 27-Jan-2015 |
Category: |
Technology |
Upload: | jgauffin |
View: | 119 times |
Download: | 4 times |
ASP.NET MVC4 + NoSQL
= Major Awesomness
IoC Container
Vad menas egentligen?
public class UserService{ UserRepository _repos; public UserService() { _repos = new UserRepository("myConString"); }}
Går icke att testa eller byta beroende
public class UserService{ IUserRepository _repos; public UserService(IUserRepos repos) { _repos = repos; }}
//prodvar repos = new UserRepos("ConStr");var service = new UserService(repos);var user =service.Create("Jonas", "Gauffin");
//testvar repos = Mock.Create<IUserRepos>() .When(m => m.GetUser) .Return(new User("Pelle"));var service = new UserService(repos);
ADO.NET
• 99% runtime fel• DataSets & DataTables• Databas-specifik kod (både SQL + drivers)
Stor del av tiden läggs på SQL-frågoroch komma ihåg vad DataSets innehåller
ORM-lager
• 99% kompileringsfel• Mycket "magiskt"• Tydliga fel är mycket viktigt
Stor del av tiden läggs på mappningarna och tyda felmeddelanden
NoSQL
Dina klasser ÄR databasen = all tid läggs på utveckling
ps: dokument = tabell
KeyValue / Document / Graph
NoSQL - RavenDB
• Utvecklad av nhibernate-skaparen • Använder som standard Esent• BSON för lagring• Embedded eller standalone• Sharding• Inbyggd fritextsökning (Lucene.NET)• Transaktioner• Replikering
Bloggexempel - klasser
class Blog{ public string Id { get; set; } public string Author { get; set; } public string Title { get; set; } public string Url { get; set; }}
public class Post{ public string Id { get; set; } public Blog Blog { get; set; } public string Title { get; set; } public string[] Tags { get; set; } public List<Comment> Comments { get; set; }}
Bloggexempel - json
blogs = [{ "Id": "blogs/1", "Author": "Jonas Gauffin", "Title": "jgauffin's coding den", "Url": "http://blog.gauffin.org"}];
posts = [{ "Id": "posts/1", "BlogId": "blogs/1", "Title": "First post", "Tags": ["code quality", "architecture", "asp.net-mvc"], "Comments": [{ "Title": "Your blog is awsome!", "Comment": "Thank you Jonas! Your blog is my favorite." }]}]
Sharding
RavenDb.ToCode()
ASP.NET MVC4
I detta seminarie:
• Stöd för mobiler• Recepies• Bundles
Annat nytt:
• AsyncControllers + Task• Senaste Azure SDKn (sep.)• Async (ASP.NET 4.5)• WebSockets • Prestandaförbättringar
ASP.NET MVC
Dependency-Resolver
ModelMetadataProvider
ModelValidatorProvider
ActionFilterControllerActivator
ActionResult
Routing
VirtualPathProvider
AreasException
Filter
Bundles
För styleheets och scripts
• Slår ihop (javascript1.js + .. + javascript32.js = bigfat.js)
• Minifierar (STOR blir liten)
• Cachar ("cache is king")
Recipies
• Förenkla vanligt förekommande uppgifter i MVCo Egen vy-wizard anpassad efter företags designo Controllers som följer företagets mallo Domänmodel/Vymodell utan mappningsverktyg
• En mer lättviktig integration i Visual Studioo Skapa GUI wizardso Wrappar vanliga VStudio SDKn
Anpassning för mobiler
• Specifika vyer/layouter för mobilero Kan anpassa per mobil (User-Agent)o Letar automatiskt efter korrekt vyo (_layout.Mobile.cshtml / Index.Mobile.cshtml)
• Kan toggle renderingsläge• jQuery mobile
K O D
Länkar
RavenDBhttp://ravendb.net
ASP.NET MVC4http://bit.ly/tXk6bR
Document Design (NoSQL)http://bit.ly/tn32IU
Griffin.MvcContribhttp://bit.ly/tv6o6J