20101109 (tech ed) how frameworks kill projects

Post on 15-May-2015

2.146 views 1 download

Tags:

description

When it comes to Microsoft .NET-connected development, more and more frameworks are entering the market, both from Microsoft and from open source. Think of ASP.NET MVC, Castle, Windows Workflow Foundation (WF), Entity Framework, Unity, Linq2SQL, ADO.NET Data Services, Windows Communication Foundation (WCF), nHibernate, Spring.NET, CSLA, NUnit, Enterprise Library, MEF or ADF.Once you apply one or more frameworks to a project, the trouble begins. What if you require features that aren’t implemented in the framework? What if you decide that another framework would have been better and want to switch halfway through your project? What if the author of your favorite open source framework suddenly stops developing? What if the framework contains bugs or omissions? And what if a new version of the framework is released that is implemented differently?These and many more everyday problems can bring your project a halt, or at least require serious refactoring. During this highly interactive talk, Sander Hoogendoorn, chief architect of Capgemini’s agile Accelerated Delivery Platform and member of Microsoft’s Partner Advisory Council .NET, demonstrates pragmatic architectures and patterns that will help your projects avoid framework issues and to keep code independent of framework choices. Sander presents models of layered architectures, and looks at applying bridge patterns, managers-providers, dependency injection, descriptors and layer super-types, accompanied by lots of demos and (bad) code examples using blocks from Microsoft’s Enterprise Library, NHibernate, Log4Net, and the Entity Framework.Join this interactive discussion to share your experience of improving the structure and quality of your software architecture and code, and to discuss how to avoid common pitfalls of applying frameworks to .NET software development.

Transcript of 20101109 (tech ed) how frameworks kill projects

And patterns to help you avoid getting killed

Sander Hoogendoorn | Principal Technology Officer | Capgemini | @aahoogendoorn

ARC203 - HOW FRAMEWORKS CAN KILL YOUR PROJECTS

2HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

Capgemini

� Principal technology officer

� Global agile thought leader

� Chief architect Accelerated Delivery Platform (ADP)

Other

� Microsoft Partner Advisory Council .NET

� Author books and articles in international magazines

� Appreciated speaker at international conferences

� Columns in several magazines

� Editorial boards

Web

� www.sanderhoogendoorn.com

� www.smartusecase.com

� Twitter: @aahoogendoorn

SANDER HOOGENDOORN

3HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

ARC203 – How frameworks can kill your projects

� Tuesday 12:00

� Hall 3.2 Interactive 2

ARC202 - How frameworks can kill your projects

� Wednesday 13:20

� Hall 7.1b London 2

ARC203 – How frameworks can kill your projects (repeat)

� Thursday 10:30

� Hall 3.2 Interactive 6

ARC205 – How smart use cases drive web development

� Friday 10:30

� Hall 7.3 Berlin 1

SANDER HOOGENDOORN – TECHED 2010 SESSIONS

4HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

5HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

It always takes longer than you expect,

even when you take into account Hofstadter’s Law

HOFSTADTER’S LAW

7HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MYFIRSTSURVEY

8HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MYFIRSTSURVEY

Frameworks, like pizzas, come in only two sizes: too big and too small.

LIFE IS NEVER EASY …

10HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MYFIRSTSURVEY

11HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

WHAT’S IT GONNA BE PUNK?General purpose frameworks

Enterprise Library, Spring.Net, Castle, NakedObjects,

Accelerated Delivery Framework (ADF), SubSonic

Single goaled frameworks – verticals

Dependency injection: ObjectBuilder, Unity, Castle

Windsor

Logging: Log4Net, Logging Block, Common.Logging

Exception handling: Exception Handling Block

Apect orientation: PostSharp, SetPoint

Search: Lucene.net, NLucene

Portals: DotNetNukeSpatial, Umbraco

Single goaled frameworks – architectural

User interface: Silverlight, ASP.NET MVC, WPF, ASP.NET

Ajax, Spring MVC

Process: UI Process Application Block, WF

Domain: Entity Framework, Hibernate, NEO

Data: Entity Framework, Hibernate, Castle ActiveRecord, CSLA

Service s: WCF, WCF RIA

12HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

FRAMEWORKS - CODEPLEX

13HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

FRAMEWORKS – WWW.CSHARPOPENSOURCE.COM

14HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

FRAMEWORKS – MICROSOFT ENTERPRISE LIBRARY

15HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

FRAMEWORKS – PROJECT CASTLE

16HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DON’T BELIEVE THE HYPE – IT’S A SQL

17HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

CONVINCING THE MANAGEMENT TO APPLY THE FRAMEWORK (25.5 %)

18HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

UNDERSTANDING THE FRAMEWORK (56.4 %)

19HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

CONVINCING OTHER DEVELOPERS TO USE THE FRAMEWORK (23.6 %)

20HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

TRAINING THE DEVELOPERS (20 %)

21HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

THE EYE OF THE TIGER

22HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

My software never has bugs. It just develops random features

APPLYING FRAMEWORKS

24HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

SO GLAD YOU MADE IT!

What if we require

additional features that

aren’t covered by our

framework?

What if we decide that

another framework might

be better than the one

we’re using now?

What if the author of our

favorite framework suddenly

stops developing it?

What if the framework

contains bugs?

And what if the new version

of our framework is

implemented totally

different?

25HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MORE THAN ANYTHING, DEPENDENCIES WILL KILL YOUR PROJECT

A short story about framework developers and application developers

KENTUCKY FRIED ARCHITECTURE

27HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

THE CUSTOMER IS NOT ALWAYS RIGHT

28HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

PIGS & CHICKENS

The application

developer

The framework

developer

29HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

KFC ARCHITECTURE – ENTITY FRAMEWORK

30HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

KFC ARCHITECTURE – ENTITY FRAMEWORK

31HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

KFC ARCHITECTURE – ENTITY FRAMEWORK

I don’t care if it works on your machine! We are not shipping your machine!

LETTING THE LUNATICS RUN THE ASYLUM

Here’s … beta!

33HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

ON THE WRONG TRACK

34HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

HOT OR NOT?

Hot? From hot to not? Not?

HTML5

LightSwitch

WCF RIA Services

Silverlight 4.0

ASP.NET MVC 2 (3?)

ASP.NET Dynamic Data

ADO.NET Data Services

MEF

Azure Services

jQuery

NService Bus

Oslo

M

MGrammar

Expression Blend

ASP.NET Ajax

REST

Dublin

BizTalk

Surface

Duet

SketchFlow

Entity Framework 2.0

LINQ2SQL

LINQ2Entities

Entity Data Model

WPF

Unity

DSL’s

Silverlight 2.0

F#

ASP.NET

PopFly

35HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

HERE’S JOHNNY! – ASP.NET MVC

36HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

HERE’S JOHNNY! – ASP.NET MVC

It’s only in theory that practice and theory are the same

NO STRINGS ATTACHED

38HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MYFIRSTSURVEY

39HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

CHANGING BASE CLASSES – – NHIBERNATE / LOG4NET

40HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

CHANGING BASE CLASSES – NHIBERNATE / LOG4NET

Programming is like sex.

One mistake and you have to support it for the rest of your life

YES, YOUR FRAMEWORKS VERSION TOO

42HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

IT AIN’T OVER TILL IT’S OVER

43HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MISSING BASE CLASSES – WORKFLOW FOUNDATION 4.0

44HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MISSING BASE CLASSES – WORKFLOW FOUNDATION 4.0

HOW TO AVOID GETTING KILLED

46HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

Architecture starts when you carefully put two bricks together. There it begins.

SOUND ARCHITECTURE

(SOFTWARE.ARCHITECTURE != LIST<FRAMEWORK>)

49HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

A SOFTWARE ARCHITECTURE

50HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

Presentation

Process

Domain

Data / Services

Outside world

Pages

UserControls

Panels

Use cases

Workflow

Domain objects / Entities

Factories / Repositories

Enums / Value objects / Smart references

[Mapping]

Service gateways

Service locators

[Mapping]

Databases

Services / ESB

Exact SAP BizTalk Java

Silverlight

XAML

Entities

(from EF)

Domain

Services

Metadata

Entity Framework

LINQ

Nhibernate?

MVVM?

MVP?

51HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

THE GOOD, THE BAD AND THE UGLYDependencies

� Using frameworks is simply good, gringo

� However, being dependant on third parties

can put your project at risk

� How stable are the frameworks you use?

� How stable is the framework vendor?

Minimize dependencies

� Map frameworks to your software architecture,

not vice versa

� Define your own layer supertypes

� Wrap framework functionality

� Apply manager-provider pattern

� Implement extension methods if all fails

52HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

From a programmer's point of view the user is a peripheral

that types when you issue a read request.

LAYER SUPERTYPE

54HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

LAYER SUPERTYPE What’s a layer supertype Ollie?

� Acts as a supertype for all types in

its layer

� All types inherit from the layer

supertype

Well Stan, it’s characteristics are

� Name expresses common behaviour

� Forces common features on all inherited types

� Ideal starting point for services

� Initially the layer supertype is empty

� Reserve layer supertype for future additions

� Extension methods don’t (always) help, you know

55HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

LAYER SUPERTYPE – ASP.NET MVC

56HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

LAYER SUPERTYPE – ASP.NET MVC

57HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

Presentation

Process

Domain

Data / Services

Outside world

Pages

UserControls

Panels

Use cases

Workflow

Domain objects / Entities

Factories / Repositories

Enums / Value objects / Smart references

[Mapping]

Service gateways

Service locators

[Mapping]

Databases

Services / ESB

Exact SAP BizTalk Java

58HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

LAYER SUPERTYPE – USING A LAYER SUPERTYPE

59HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

LAYER SUPERTYPE – DEFINE SERVICES ON LAYER SUPERTYPES

60HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

LAYER SUPERTYPE – EXTENSION METHODS ON LAYER SUPERTYPES

61HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

Always code as if the guy who ends up maintaining your code

will be a violent psychopath who knows where you live.

DESCRIPTOR

63HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

I KNOW NOTHING. I’M FROM BARCELONA

What is the matter

Mister Fawlty?

The problem Manual, is that

� I want to use constants in my

application

� But I want to define them in my

framework and extend them in my

application

� Enumeration won’t do – there’s no

inheritance

64HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR – THE PROBLEM (1)

65HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR – THE PROBLEM (2)

66HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

ENUM?

67HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

STRING COLLECTION?

68HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

STRING COLLECTION

69HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

I KNOW NOTHING. I’M FROM BARCELONA

Descriptor

Defines a restricted but

application specific

extendible list of

definitions

Useful when

� Enums can not be inherited

� Framework defines enumerationtypes that need to be extended in application code

� Define layer supertype usingreflection

� Pre-define frequently used instances

70HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN

71HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN - DEFINITION

72HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN – EXTENDED DEFINITION

73HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN – USE IN FRAMEWORK

74HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN – USE IN APPLICATION

75HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MYFIRSTSURVEY

76HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN – USE IN ASP.NET MVC

77HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DESCRIPTOR PATTERN – USE IN ASP.NET MVC

78HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

AGENDA

An short story

about frameworks

How frameworks can

get you in trouble

Software architecture

versus frameworks

The layer

supertype

Introducing the

descriptor pattern

The

manager-provider

XML is like violence.

If it doesn’t solve your problems, you are not using enough of it.

DEPENDENCY INJECTION

80HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

A NEW DISEASE?What do you think it is?

Create true separation between definition and implementation, so that the two can vary independently and can be replaced easily

Looks like a typical case of dependency

injection to me

� Call functionality without having to know

the actual implementation

� Implement replaceable services

� Apply implementations in different contexts

� Plug-in services at run-time

So …

� Single topic services

� Single or multiple implemenationsneed to be handled, which differsdependant on context, like withWindows API, logging or errorhandling

� Unit testing

81HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DIFFERENT VARIATIONS?Did you know that there

are different types of this

dependency injection?

Arggh…

Yeah, sure. There’s

� Constructor injection

� Property (setter) injection

� And even manual injectionWho cares doc?

82HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DEPENDENCY INJECTION – CONSTRUCTOR INJECTION

83HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DEPENDENCY INJECTION – MANUAL INJECTION

c

84HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

DEPENDENCY INJECTION – WHAT TO PLUG IN

Yes, XML will hurt you too!

"Teamwork is a lot of people doing what I say“

Marketing executive, Citrix Corporation

MANAGER – PROVIDER

86HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

Definition

� Create a simple static facade (manager) for

a (set of) interfaced implementations

(providers)

In practice

� Manager holds one or a collection of

providers

� Provider implement a particular interface

� Manager has methods to call methods

from interface

� At run-time, using dependency injection,

actual providers are injected

MANAGER-PROVIDER PATTERN

87HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MANAGER – VALIDATIONMANAGER

88HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

INTERFACE

89HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MANAGER – INITIALIZATION (USING DEPENDENCY INJECTION)

90HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

CONFIGURATION OF IMPLEMENTATION

91HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

MANAGER - EXECUTING METHODS

92HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

CLIENT – CALLING METHODS

93HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

Useful when

� Generic services need to be called, which may have different implementations

� Manager prevents having to loop through each of a list of providers

� Flexibility to add or remove providers without changing application code

� Providers differ e.g. in development code, test code or deployed code

Use for

� Task Management

� View Management

� Binding and Persisting

� Resource Management

� State Management

� Logging

� Datasource interaction

� Testing!

MANAGER-PROVIDER PATTERN

94HOW FRAMEWORKS CAN KILL YOUR PROJECTS©2010 Capgemini. All Rights Reserved

THE GOOD, THE BAD AND THE UGLYDependencies

� Using frameworks is simply good, gringo

� However, being dependant on third parties

can put your project at risk

� How stable are the frameworks you use?

� How stable is the framework vendor?

Minimize dependencies

� Map frameworks to your software architecture,

not vice versa

� Define your own layer supertypes

� Wrap framework functionality

� Apply manager-provider pattern

� Implement extension methods if all fails

www.accelerateddeliveryplatform.com

WWW.SMARTUSECASE.COM

sander.hoogendoorn@capgemini.com

www.sanderhoogendoorn.com | www.smartusecase.com

Twitter: @aahoogendoorn

REFERENCES AND QUESTIONS