Mais conteúdo relacionado Semelhante a 20101109 (tech ed) how frameworks kill projects (20) Mais de Sander Hoogendoorn (20) 20101109 (tech ed) how frameworks kill projects1. And patterns to help you avoid getting killed
Sander Hoogendoorn | Principal Technology Officer | Capgemini | @aahoogendoorn
ARC203 - HOW FRAMEWORKS CAN KILL YOUR PROJECTS
2. 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
3. 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
4. 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
5. 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
6. It always takes longer than you expect,
even when you take into account Hofstadter’s Law
HOFSTADTER’S LAW
11. 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
12. 12HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
FRAMEWORKS - CODEPLEX
13. 13HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
FRAMEWORKS – WWW.CSHARPOPENSOURCE.COM
14. 14HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
FRAMEWORKS – MICROSOFT ENTERPRISE LIBRARY
15. 15HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
FRAMEWORKS – PROJECT CASTLE
16. 16HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DON’T BELIEVE THE HYPE – IT’S A SQL
17. 17HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
CONVINCING THE MANAGEMENT TO APPLY THE FRAMEWORK (25.5 %)
18. 18HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
UNDERSTANDING THE FRAMEWORK (56.4 %)
19. 19HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
CONVINCING OTHER DEVELOPERS TO USE THE FRAMEWORK (23.6 %)
20. 20HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
TRAINING THE DEVELOPERS (20 %)
21. 21HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
THE EYE OF THE TIGER
22. 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
24. 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?
25. 25HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
MORE THAN ANYTHING, DEPENDENCIES WILL KILL YOUR PROJECT
26. A short story about framework developers and application developers
KENTUCKY FRIED ARCHITECTURE
27. 27HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
THE CUSTOMER IS NOT ALWAYS RIGHT
28. 28HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
PIGS & CHICKENS
The application
developer
The framework
developer
29. 29HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
KFC ARCHITECTURE – ENTITY FRAMEWORK
30. 30HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
KFC ARCHITECTURE – ENTITY FRAMEWORK
31. 31HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
KFC ARCHITECTURE – ENTITY FRAMEWORK
32. 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!
34. 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
35. 35HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
HERE’S JOHNNY! – ASP.NET MVC
36. 36HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
HERE’S JOHNNY! – ASP.NET MVC
37. It’s only in theory that practice and theory are the same
NO STRINGS ATTACHED
39. 39HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
CHANGING BASE CLASSES – – NHIBERNATE / LOG4NET
40. 40HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
CHANGING BASE CLASSES – NHIBERNATE / LOG4NET
41. Programming is like sex.
One mistake and you have to support it for the rest of your life
YES, YOUR FRAMEWORKS VERSION TOO
42. 42HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
IT AIN’T OVER TILL IT’S OVER
43. 43HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
MISSING BASE CLASSES – WORKFLOW FOUNDATION 4.0
44. 44HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
MISSING BASE CLASSES – WORKFLOW FOUNDATION 4.0
46. 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
49. 49HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
A SOFTWARE ARCHITECTURE
50. 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?
51. 51HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
THE GOOD, THE BAD AND THE UGLY
Dependencies
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
52. 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
53. From a programmer's point of view the user is a peripheral
that types when you issue a read request.
LAYER SUPERTYPE
54. 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
55. 55HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
LAYER SUPERTYPE – ASP.NET MVC
56. 56HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
LAYER SUPERTYPE – ASP.NET MVC
57. 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
58. 58HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
LAYER SUPERTYPE – USING A LAYER SUPERTYPE
59. 59HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
LAYER SUPERTYPE – DEFINE SERVICES ON LAYER SUPERTYPES
60. 60HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
LAYER SUPERTYPE – EXTENSION METHODS ON LAYER SUPERTYPES
61. 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
62. Always code as if the guy who ends up maintaining your code
will be a violent psychopath who knows where you live.
DESCRIPTOR
63. 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
64. 64HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR – THE PROBLEM (1)
65. 65HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR – THE PROBLEM (2)
69. 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 enumeration
types that need to be extended in
application code
Define layer supertype using
reflection
Pre-define frequently used instances
71. 71HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR PATTERN - DEFINITION
72. 72HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR PATTERN – EXTENDED DEFINITION
73. 73HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR PATTERN – USE IN FRAMEWORK
74. 74HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR PATTERN – USE IN APPLICATION
76. 76HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR PATTERN – USE IN ASP.NET MVC
77. 77HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DESCRIPTOR PATTERN – USE IN ASP.NET MVC
78. 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
79. XML is like violence.
If it doesn’t solve your problems, you are not using enough of it.
DEPENDENCY INJECTION
80. 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 implemenations
need to be handled, which differs
dependant on context, like with
Windows API, logging or error
handling
Unit testing
81. 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 injection
Who cares doc?
82. 82HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DEPENDENCY INJECTION – CONSTRUCTOR INJECTION
83. 83HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DEPENDENCY INJECTION – MANUAL INJECTION
c
84. 84HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
DEPENDENCY INJECTION – WHAT TO PLUG IN
Yes, XML will hurt you too!
85. "Teamwork is a lot of people doing what I say“
Marketing executive, Citrix Corporation
MANAGER – PROVIDER
86. 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
87. 87HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
MANAGER – VALIDATIONMANAGER
89. 89HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
MANAGER – INITIALIZATION (USING DEPENDENCY INJECTION)
90. 90HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
CONFIGURATION OF IMPLEMENTATION
91. 91HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
MANAGER - EXECUTING METHODS
92. 92HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
CLIENT – CALLING METHODS
93. 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
94. 94HOW FRAMEWORKS CAN KILL YOUR PROJECTS
©2010 Capgemini. All Rights Reserved
THE GOOD, THE BAD AND THE UGLY
Dependencies
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