TDD, DI, and SoC with ASP.NET MVC

17
TDD, DI, and SoC with ASP.NET MVC Presented by Jeffrey Palermo CTO, Headspring Systems Microsoft MVP, MCSD.Net [email protected]

description

TDD, DI, and SoC with ASP.NET MVC. Presented by Jeffrey Palermo CTO, Headspring Systems Microsoft MVP, MCSD.Net [email protected]. Agenda. What is ASP.NET MVC? Sound architectural approach Soc – Separation of Concerns DI – Dependency Injection - PowerPoint PPT Presentation

Transcript of TDD, DI, and SoC with ASP.NET MVC

Page 1: TDD, DI, and  SoC with  ASP.NET MVC

TDD, DI, and SoC with ASP.NET MVC

Presented byJeffrey PalermoCTO, Headspring SystemsMicrosoft MVP, [email protected]

Page 2: TDD, DI, and  SoC with  ASP.NET MVC

Agenda

•What is ASP.NET MVC?•Sound architectural approach•Soc – Separation of Concerns•DI – Dependency Injection•TDD – Test-Driven Development•Questions

Page 3: TDD, DI, and  SoC with  ASP.NET MVC

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

www.ineta.org

Page 4: TDD, DI, and  SoC with  ASP.NET MVC

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

Page 5: TDD, DI, and  SoC with  ASP.NET MVC

What is ASP.NET MVC?

ASP.NET• HttpApplication• HttpContext• HttpRequest• HttpResponse• HttpRuntime• HttpUtility• IHttpHandler• IHttpModule

Mvc• Routes• Controllers• ViewData• Filters• MvcContribASPX• MasterPages• Themes, Skins• General Templating

Page 6: TDD, DI, and  SoC with  ASP.NET MVC

Two types of architecture

• Short-term• Long-lived

Page 7: TDD, DI, and  SoC with  ASP.NET MVC

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

Page 8: TDD, DI, and  SoC with  ASP.NET MVC

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)

Page 9: TDD, DI, and  SoC with  ASP.NET MVC

Traditional Layered Architecture

Data Access/Infrastructure

Business Logic

UI

Page 10: TDD, DI, and  SoC with  ASP.NET MVC

Traditional Layered Architecture

Business Logic

UI

Data Access

I/OWCF

Page 11: TDD, DI, and  SoC with  ASP.NET MVC

Web Service

File

Solution Structure

UI Business Logic

Data Access

DB

Infrastructure

Page 12: TDD, DI, and  SoC with  ASP.NET MVC

Better layering

Business Logic(service classes)

UI Data Access

I/OWCF

Object Model (business logic)

Page 13: TDD, DI, and  SoC with  ASP.NET MVC

Onion Architecture

Object Model

Object Services

Application Services

User Interface

Infrastr

ucture

Tests

DB

Web Service

FileApplication Core

LoginController

IUserSessionIEmployeeRepository

HttpUserSession<<class>>

EmployeeRepository<<class>>

EmployeeEmployeeSelectList

Page 14: TDD, DI, and  SoC with  ASP.NET MVC

Web Service

File

Solution Structure

UI Core

Infrastructure

DB

IoC Container

Page 15: TDD, DI, and  SoC with  ASP.NET MVC

Demo ahead (all code)

Page 16: TDD, DI, and  SoC with  ASP.NET MVC

MvcContrib

• http://mvccontrib.org • Founded by Eric Hexter and Jeffrey Palermo• Multiple view engines• ViewDataExtensions• IoC Container support• Html helpers• Extra ActionFilters• Anything else the community contributes

Page 17: TDD, DI, and  SoC with  ASP.NET MVC

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• www.partywithpalermo.com• Headspring’s Agile Boot Camp