building a next-generation web application with asp.net mvc 2 and jquery nate kohari co-founder /...
TRANSCRIPT
![Page 1: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/1.jpg)
Building a Next-Generation Web Applicationwith ASP.NET MVC 2 and jQuery
Nate KohariCo-Founder / CTOEnkari, [email protected]
![Page 2: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/2.jpg)
Who?
![Page 3: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/3.jpg)
![Page 4: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/4.jpg)
![Page 5: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/5.jpg)
Goals
![Page 6: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/6.jpg)
ASP.NET is a great platformfor building attractive, standards-compliant
rich internet applications
![Page 7: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/7.jpg)
You can build rich internet applications withoutSilverlight or Flash
![Page 8: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/8.jpg)
Why ASP.NET MVC?
![Page 9: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/9.jpg)
BizSpark
![Page 10: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/10.jpg)
Why jQuery?
![Page 11: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/11.jpg)
(demo)
![Page 12: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/12.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
Anatomy of a typicalZen request
![Page 13: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/13.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
ASP.NET MVC
HTML/JavaScript
![Page 14: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/14.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
![Page 15: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/15.jpg)
JS.Class
![Page 16: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/16.jpg)
Zen.Ui.StoryCard = new JS.Class({ func1: function() { ... }, func2: function() { ... }});
var card = new Zen.Ui.StoryCard();
![Page 17: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/17.jpg)
Behaviors
![Page 18: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/18.jpg)
$(“.story-card”).attach( Zen.Ui.Behaviors.StoryCard);
![Page 19: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/19.jpg)
Find all elements with the CSS class story-card…
$(“.story-card”).attach( Zen.Ui.Behaviors.StoryCard);
![Page 20: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/20.jpg)
…and apply the appropriate behavior
$(“.story-card”).attach( Zen.Ui.Behaviors.StoryCard);
![Page 21: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/21.jpg)
Which card did theuser move?
![Page 22: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/22.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
![Page 23: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/23.jpg)
<li data-projectid=“123” data-storyid=“456”> ...</li>
HTML5 data-* attributes
(story card)
![Page 24: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/24.jpg)
<li data-projectid=“123” data-storyid=“456”> ...</li>
HTML5 data-* attributes
(story card)
{ projectid: 123, storyid: 456 }
JSON read via Metadata Plugin
![Page 25: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/25.jpg)
Where should we sendthe request?
![Page 26: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/26.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
![Page 27: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/27.jpg)
One Action = One Route
![Page 28: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/28.jpg)
One Action = One Route(“route-per-action”)
![Page 29: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/29.jpg)
<app> <project> <route action=“move” pattern=“project/{projectid}/story/{storyid}/move” verbs=“post”/> ... </project> ...</app>
Routes defined in XML:
![Page 30: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/30.jpg)
<app> <project> <route action=“move” pattern=“project/{projectid}/story/{storyid}/move” verbs=“post”/> ... </project> ...</app>
Routes defined in XML:
…at app start, parsed & registered in RouteTable
![Page 31: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/31.jpg)
<app> (area) <project> <route action=“move” pattern=“project/{projectid}/story/{storyid}/move” verbs=“post”/> ... </project> ...</app>
Routes defined in XML:
![Page 32: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/32.jpg)
<app> <project> (controller) <route action=“move” pattern=“project/{projectid}/story/{storyid}/move” verbs=“post”/> ... </project> ...</app>
Routes defined in XML:
![Page 33: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/33.jpg)
<app> <project> <route action=“move” pattern=“project/{projectid}/story/{storyid}/move” verbs=“post”/> ... </project> ...</app>
Routes defined in XML:
![Page 34: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/34.jpg)
Url.Action(“move”, “story”, new { projectid = 123, storyid = 456 })
![Page 35: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/35.jpg)
Url.Action(“move”, “story”, new { projectid = 123, storyid = 456 })
http://agilezen.com/projects/123/story/456/move
![Page 36: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/36.jpg)
But wait… we needthe route in JavaScript!
![Page 37: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/37.jpg)
urlfor()
![Page 38: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/38.jpg)
urlfor(“move”, “story”, { projectid: 123, storyid: 456 })
![Page 39: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/39.jpg)
urlfor(“move”, “story”, { projectid: 123, storyid: 456 })
http://agilezen.com/projects/123/story/456/move
![Page 40: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/40.jpg)
urlfor(“move”, “story”, { projectid: 123, storyid: 456 })
Metadata read from story card <li>
![Page 41: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/41.jpg)
routes.js
![Page 42: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/42.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
![Page 43: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/43.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
ASP.NET MVC
HTML/JavaScript
![Page 44: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/44.jpg)
Aspect Oriented Programming
![Page 45: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/45.jpg)
[Demand]
![Page 46: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/46.jpg)
[Demand(Permission.EditStory)]
![Page 47: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/47.jpg)
[Secured]
![Page 48: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/48.jpg)
[Secured(SSLMode.Force)]
![Page 49: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/49.jpg)
[Transactional]
![Page 50: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/50.jpg)
Output Filters
![Page 51: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/51.jpg)
[DoNotCache]
![Page 52: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/52.jpg)
[StripWhitespace]
![Page 53: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/53.jpg)
[HandleExceptions]
![Page 54: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/54.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
![Page 55: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/55.jpg)
Filters SecurityOther cross-cutting concerns
![Page 56: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/56.jpg)
ControllerInterprets requestsCommunicates with browserSets up view data
Filters SecurityOther cross-cutting concerns
![Page 57: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/57.jpg)
Controller
Domain Service
Interprets requestsCommunicates with browserSets up view data
Modifies data modelBroadcasts events
Filters SecurityOther cross-cutting concerns
![Page 58: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/58.jpg)
Controller
Domain Service
Repository
Interprets requestsCommunicates with browserSets up view data
Modifies data modelBroadcasts events
Persists data to database
Filters SecurityOther cross-cutting concerns
![Page 59: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/59.jpg)
Controller
Domain Service
Repository
Filters
LINQ
NHibernate
![Page 60: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/60.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
![Page 61: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/61.jpg)
Messenger
SMTP Service
Domain Service
XMPP Service
![Page 62: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/62.jpg)
Messenger
SMTP Service
Domain Service
XMPP Service
Events queued
![Page 63: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/63.jpg)
Messenger
SMTP Service
Domain Service
XMPP Service
Events queued
![Page 64: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/64.jpg)
Messenger
SMTP Service
Domain Service
XMPP Service
Email notifications IM notifications
Events queued
![Page 65: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/65.jpg)
User Action
Metadata Lookup
Route Lookup
Filters
Domain Service
Event Broadcast
Recap
![Page 66: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/66.jpg)
![Page 67: Building a Next-Generation Web Application with ASP.NET MVC 2 and jQuery Nate Kohari Co-Founder / CTO Enkari, Ltd. nate@enkari.com](https://reader035.vdocument.in/reader035/viewer/2022062803/56649f2f5503460f94c49f3e/html5/thumbnails/67.jpg)
Thanks for listening!Nate Koharihttp://kohari.orghttp://[email protected]@nkohari