refactoring to a solid foundation
DESCRIPTION
Refactoring to a SOLID Foundation. Steve Bohlen Senior Software Engineer SpringSource /VMware E-Mail: [email protected] Blog: http://blog.unhandled-exceptions.com Twitter: @ sbohlen. Sleep is for Wimps!. Indulge Yourself!. Get your LEARN on!. Do I suck?. Let me (and the world) know!. - PowerPoint PPT PresentationTRANSCRIPT
St Louis Day of .NET 2011
Refactoring to a SOLID Foundation
Steve BohlenSenior Software EngineerSpringSource/VMware
E-Mail: [email protected]: http://blog.unhandled-exceptions.comTwitter: @sbohlen
St Louis Day of .NET 2011
Sleep is for Wimps!
St Louis Day of .NET 2011
Indulge Yourself!
St Louis Day of .NET 2011
Get your LEARN on!
St Louis Day of .NET 2011
Do I suck?Let me (and the world) know!
http://spkr8.com/t/8095
St Louis Day of .NET 2011
Who am I?• …and why should you care?• Steve Bohlen• I Read Books + Write Software• vs. “Read Software + Write Books”
• Blog, Screencast, Speak, Share, Learn
St Louis Day of .NET 2011
Steve BohlenNearly 20 years developing softwareLISP, Delphi, C/C++, VB, VB.NET, C#Senior Engineer Springsource/VMwareCo-Founder, NYC Alt.Net User Group
http://nyalt.netCo-Organizer, NYC DDD User Group
http://dddnyc.orgContributor: various OSS projects
NHibernate http://www.nhforge.orgNDbUnit http://www.googlecode.com/ndbunitSpring.NET http://www.springframework.net
blog: http://blog.unhandled-exceptions.come-mail: [email protected]: @sbohlen
CYND D D
St Louis Day of .NET 2011
RAD Controls for ASP.NET AJAX
RAD Controls for Silverlight
RAD Controls for Windows Phone
RAD Controls for Winforms
RAD Controls for WPF
Telerik Reporting
Telerik OpenAccess ORM
Telerik JustCode
Telerik JustMock
Telerik Extensions for ASP.NET MVC
Test Studio Express
Telerik TeamPulse
Telerik Test Studio
Sitefinity CMS
Telerik JustDecompile
C#/VB.NET Converter
ASPX to Razor Converter
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
•Disciplined technique•Restructuring an existing body of code•Altering its internal structure without changing its external behavior•A series of small behavior-preserving transformations•Each 'refactoring’ does little by itself•A sequence of transformations can produce a significant restructuring•Each refactoring is small so it's less likely to go wrong•The system is kept fully working after each small refactoring
Refactoring
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Refactoring Tools•Developer Express CodeRush
http://devexpress.com/coderush
•JetBrains Resharperhttp://www.jetbrains.com/resharper/
•Telerik JustCodehttp://www.telerik.com/products/justcode.aspx
•Visual Studio Professional
•Notepad!
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Introduction to S.O.L.I.D.
SOLID
ingle Responsibility PrincipleRPCPSPSPIP
pen-Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
St Louis Day of .NET 2011
Introduction to S.O.L.I.D.
SOLID
ingle Responsibility Principle
pen-Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Single Responsibility Principle
There should never be more than one reason for a class to change.
St Louis Day of .NET 2011
Refactoring to a S.O.L.I.D. Foundation
SRP Demo
St Louis Day of .NET 2011
Introduction to S.O.L.I.D.
SOLID
ingle Responsibility Principle
pen-Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Open-Closed Principle
Software Entities (Classes, Modules, Functions, etc.)should be Open for Extension, but Closed
for Modification.
St Louis Day of .NET 2011
Refactoring to a S.O.L.I.D. Foundation
OCP Demo
St Louis Day of .NET 2011
Introduction to S.O.L.I.D.
SOLID
ingle Responsibility Principle
pen-Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Liskov Substitution Principle
If for each object o1 of type Sthere is an object o2 of type T such thatfor all programs P defined in terms of T,
the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T.WTF ?!?
St Louis Day of .NET 2011
Liskov Substitution Principle
Functions that use pointers or references to base classes must be able to use objects of
derived classes without knowing it.
St Louis Day of .NET 2011
Refactoring to a S.O.L.I.D. Foundation
LSP Demo
St Louis Day of .NET 2011
Introduction to S.O.L.I.D.
SOLID
ingle Responsibility Principle
pen-Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Interface Segregation Principle
Clients should not be forced to depend upon interfaces that they do not use.
St Louis Day of .NET 2011
Refactoring to a S.O.L.I.D. Foundation
ISP Demo
St Louis Day of .NET 2011
Introduction to S.O.L.I.D.
SOLID
ingle Responsibility Principle
pen-Close Principle
iskov Substitution Principle
nterface Segregation Principle
ependency Inversion Principle
St Louis Day of .NET 2011
St Louis Day of .NET 2011
Dependency Inversion Principle
High Level Modules should not dependupon Low Level Modules. Both should
depend upon abstractions.
Abstractions should not depend upon details. Details should depend upon abstractions.
St Louis Day of .NET 2011
Refactoring to a S.O.L.I.D. Foundation
DIP Demo
St Louis Day of .NET 2011
Thinking About Re-Assembly
Presto!
St Louis Day of .NET 2011
Dependency Injection Frameworks• StructureMap• Spring.NET• Castle Windsor• NInject• Funq• Unity• More…
St Louis Day of .NET 2011
Refactoring to a S.O.L.I.D. Foundation
Closing Thoughts
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
St Louis Day of .NET 2011
fini
Steve BohlenSenior Software EngineerSpringSource/VMware
E-Mail: [email protected]: http://blog.unhandled-exceptions.comTwitter: @sbohlen
http://spkr8.com/t/8095