TDD, DI, and SoC with ASP.NET MVC Presented by Jeffrey Palermo CTO, Headspring Systems Microsoft MVP, MCSD.Net
Agenda What is ASP.NET MVC? Sound architectural approach Soc – Separation of Concerns DI – Dependency Injection TDD – Test-Driven Development Questions
INETA - The Face of.NET World-wide association of.NET User Groups –860+ groups world-wide –Over 810,000 developers Started and run by.NET User Group leaders Sponsors and supports both.NET and other professional user groups all around the world Sponsors –Microsoft –Verio –New sponsors welcome! North America (NorAm) INETA Speaker Bureau consists of 67 world-renowned speakers
What is ASP.NET? ASP.NET HttpApplication HttpContext HttpRequest HttpResponse HttpRuntime HttpUtility IHttpHandler IHttpModule WebForms Server Lifecycle Postback ViewState ASPX MasterPages Themes, Skins General Templating
What is ASP.NET MVC? ASP.NET HttpApplication HttpContext HttpRequest HttpResponse HttpRuntime HttpUtility IHttpHandler IHttpModule Mvc Routes Controllers ViewData Filters MvcContrib ASPX MasterPages Themes, Skins General Templating
Two types of architecture Short-term Long-lived
Philosophy Software Systems are complex Maintainability is king Simplicity rules Abstraction and the human brain (7+/-2) ASP.NET MVC is going away Coupling to infrastructure
Coupling (Architectural Metrics) Afferent Coupling (Ca) – incoming dependencies Efferent Coupling (Ce) – outgoing dependencies Instability (I) –I = Ce / (Ce + Ca) (0 = stable, 1 = instable) –Stable = painful to modify Abstractness (A) –# Abstract Types / # Total Types (0 = concrete assembly, 1 = abstract assembly)
Traditional Layered Architecture Data Access/Infrastructure Business Logic UI
Traditional Layered Architecture Business Logic UI Data Access I/O WCF
Web Service File Solution Structure UI Business Logic Data Access DB Infrastructure
Better layering Business Logic (service classes) Business Logic (service classes) UI Data Access I/O WCF Object Model (business logic)
Onion Architecture Object Model Object Services Application Services User Interface Infrastructure Tests DB Web Service File Application Core LoginControllerLoginController IUserSessionIUserSession IEmployeeRepository HttpUserSession<<class>>HttpUserSession<<class>> EmployeeRepository<<class>>EmployeeRepository<<class>> Employee EmployeeSelectList
Web Service File Solution Structure UI Core Infrastructure DB IoC Container
Demo ahead (all code)
MvcContrib Founded by Eric Hexter and Jeffrey Palermo Multiple view engines ViewDataExtensions IoC Container support Html helpers Extra ActionFilters Anything else the community contributes
About me CTO, Headspring Systems Agile coach MCSD.Net Microsft MVP, ASPInsider Certified ScrumMaster Austin.Net User Group INETA speakers bureau U.S. Army Veteran Party with Palermo Headspring’s Agile Boot Camp