30
ASP.Net MVC : Patterns and AntiPatterns Chris Hefley, Bandit Software Blog: http://indomitablehef.com Email: [email protected] Twitter: @indomitablehef

Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Embed Size (px)

DESCRIPTION

ASP.Net MVC: Patterns and AntiPatterns. Presentation from Devlink 2009, Nashville, TN, Chris Hefley http://indomitablehef.com

Citation preview

Page 1: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

ASP.Net MVC : Patterns and AntiPatterns

Chris Hefley, Bandit Software

Blog: http://indomitablehef.comEmail: [email protected]

Twitter: @indomitablehef

Page 2: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Model View Controller

HttpRequestASP.Net

ISAPI filter

HttpModules and

HttpHandlers

Some Class

RequestRouted

To

System.Web.UI.PageSystem.Web.Mvc.ControllerSome Model Retrieve Data from

Some View

Render

Page 3: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Anemic Controller

“Skinny Controller, Fat Model”

GOOD

Page 4: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Magic Strings BAD

Page 5: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

ASP.Net MVC Magic Strings

Page 6: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Banishing Magic Strings: ViewsInstead of:

Use:

Page 7: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Banishing Magic Strings: Controllers

Page 8: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Banishing Magic Strings: Controllers

Page 9: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

One Action, One View GOODInstead of:

Page 10: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

One Action, One View

Do this:

Page 11: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

View Models GOOD

Page 12: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

ViewData Dictionary BAD

Page 13: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

ViewModel Base ClassInstead of ViewData Dictionary:

GOOD

Page 14: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

ViewModel Base Class

Instead:

Page 15: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Use MVC Contrib w00t!

Page 16: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

JavaScript in Views BAD

If you must:

More goodness from MVC Contrib:

Page 17: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Branching Logic in Views BAD

Or even this:

Don’t do this:

Page 18: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Branching Logic in Views

Page 19: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Branching Logic in Views

Page 20: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

HttpContext BAD

Page 21: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

IOC Container GOOD

Page 22: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

IOC Container

Page 23: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Extensions to HtmlHelper GOOD

Page 24: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

DataBinding to Domain Object BAD

Page 25: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Custom ActionResult GOOD

Page 26: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Miscellaneous

• Use Html.Encode• jQuery!• Use AcceptVerbs Attribute on Controller

Methods (POST for those that modify Data)• Use ASP.Net MVC to create REST-ful APIs• Extension Methods to UrlHelper• Make good use of ActionFilters

Page 27: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

After-Market Parts GOOD

Page 28: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Spark View Engine• Sparkviewengine.com

Page 29: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

S#arp Architecture

Page 30: Dev Link2009 Asp Net Mvc Pattern And Ani Patterns Chris Hefley

Questions?

Chris Hefley, Bandit Software

Blog: http://indomitablehef.comEmail: [email protected]

Twitter: @indomitablehef