Bay.NET                 San FranciscoClean Code Design Patternsand Best Practices  San Francisco, January 16th 2013
Theo Jungeblut• Engineering manager & lead by day  at AppDynamics in San Francisco• Coder & software craftsman by night• A...
Rate Session & Win a Shirthttp://www.speakerrate.com/theoj
Where to get the Slideshttp://www.slideshare.net/theojungeblut
Overview•   Why Clean Code•   Clean Code Developer Initiative•   Principles and Practices•   Code Comparison•   Q&A
Does writing Clean Codemake us more efficient?
The only valid Measurement of Code               Quality
What is Clean Code?
Clean Code is maintainable     Source code must be:     • readable & well structured     • extensible     • testable
Software Engineering       &   SoftwareCraftsmanship
The “Must Read”-Book(s) by Robert C MartinA Handbook of AgileSoftwareCraftsmanship“Even bad code canfunction. But if codei...
Code Maintainability *    Principles                   Patterns                   Containers       Why?                   ...
Clean Code DeveloperGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
Clean Code Developer – 1st Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Keep it simple, stupid        (KISS)
KISS-Principle – “Keep It Simple Stupid”   by Kelly Johnson                      http://blogs.smarter.com/blogs/Lego%20Bri...
The Power of Simplicity                                                       Graphic by Nathan Sawaya courtesy of brickar...
Chaos build from simplicityGraphic by Nathan Sawaya courtesy of brickartist.com
Don’t repeat yourself        (DRY)
Don’t repeat yourself (DRY)        by Andy Hunt and Dave Thomas in their book “The Pragmatic Programmer”// Code Copy and P...
Clean Code Developer – 1st Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Clean Code Developer – 2nd Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Separation of Concerns         (SoC) Single Responsibility       Principle         (SRP)
The Producthttp://www.technicopedia.com/8865.html
Component / Service          http://www.technicopedia.com/8865.html
Class, Struct, Enum etc.http://technicbricks.blogspot.com/2009/06/tbs-techpoll-12-results-2009-1st.html
Separation of Concerns (SoC)     probably by Edsger W. Dijkstra in 1974• “In computerscience, separation of concerns(SoC) ...
Single Responsibility Principle (SRP)      by Robert C Martin“Every object should have a single responsibility, and thatre...
Read, Read, Read
Clean Code Developer – 2nd Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Clean Code Developer – 3rd Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Information Hiding Principle           (IHP)
Information Hiding Principle (IHP)         by David Parnas (1972)“.. information hiding is the principle ofsegregation of ...
Interfaces / Contracts• Decouple Usage and Implementation through introduction of a contract• Allows to replace implementa...
Liskov Substitution Principle           (LSP)
Liskov Substitution Principle (LSP)by Barbara Liskov, Jannette Wing (1994)“Liskov’s notion of a behavioral subtypedefines ...
Dependency Inversion Principle           (DIP)
Dependency Inversion Principle (DIP)  by Robert C. Martin• “High-level modules should not depend on  low-level modules. Bo...
Silicon Valley Code Camp Oct. ~ 5th – 6thhttp://www.siliconvalley-codecamp.com
Clean Code Developer – 3rd Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Clean Code Developer – 4th Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Open Closed Principle       (OCP)
Open/Closed Principle (OCP)by Bertrand Meyer (1988)An implementation is open for extensionbut closed for modification     ...
Law of Demeter     (LoD)
Law of Demeter (LoD)           Northeastern University (1987)“• Each unit should have only limited knowledge  about other ...
S               Single Responsibility Principle   O               Open/Closed Principle   L               Liskov Substitut...
Clean Code Developer – 4th Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Clean Code Developer – 5th Iteration     by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by M...
Summary Clean CodeMaintainability is achieved through:• Readability (Coding Guidelines)• Simplification and Specialization...
Q&A                                         Downloads,                                         Feedback & Comments:       ...
http://clean-code-developer.com                                          References…http://michael.hoennig.de/2009/08/08/c...
… more ReferencesResharperhttp://www.jetbrains.com/resharper/FxCop / Code Analysishttp://msdn.microsoft.com/en-us/library/...
Blog, Rating, Slideswww.speakerrate.com/theojwww.slideshare.net/theojungeblut             http://www.DesignItRight.net
Please fill out thefeedback, and…… thanks for you attention!
Upcoming SlideShare
Loading in...5
×

Clean Code - Design Patterns and Best Practices for Bay.NET SF User Group (01/16/2013)

618

Published on

Over the lifetime of a product, maintaining the product is actually one - if not the most - expensive area(s) of the overall product costs. Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code. You will be presented design patterns and best practices which will make you write better and more easily maintainable code, seeing code in a holistic way. You will learn how to apply them by using an existing implementation as the starting point of the presentation. Finally, patterns & practices benefits are explained.

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
618
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
28
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide
  • A object or any type implementing subtype or a certain interface can be replaced with another object implementing the same base type or interface.
  • Clean Code - Design Patterns and Best Practices for Bay.NET SF User Group (01/16/2013)

    1. 1. Bay.NET San FranciscoClean Code Design Patternsand Best Practices San Francisco, January 16th 2013
    2. 2. Theo Jungeblut• Engineering manager & lead by day at AppDynamics in San Francisco• Coder & software craftsman by night• Architects decoupled solutions tailored to business needs & crafts maintainable code to last• Worked in healthcare and factory automation, building mission critical applications, framework & platforms• Degree in Software Engineering and Network Communications theo@designitright.net• Enjoys cycling, running and eating www.designitright.net
    3. 3. Rate Session & Win a Shirthttp://www.speakerrate.com/theoj
    4. 4. Where to get the Slideshttp://www.slideshare.net/theojungeblut
    5. 5. Overview• Why Clean Code• Clean Code Developer Initiative• Principles and Practices• Code Comparison• Q&A
    6. 6. Does writing Clean Codemake us more efficient?
    7. 7. The only valid Measurement of Code Quality
    8. 8. What is Clean Code?
    9. 9. Clean Code is maintainable Source code must be: • readable & well structured • extensible • testable
    10. 10. Software Engineering & SoftwareCraftsmanship
    11. 11. The “Must Read”-Book(s) by Robert C MartinA Handbook of AgileSoftwareCraftsmanship“Even bad code canfunction. But if codeisn’t clean, it can bring adevelopmentorganization to itsknees.”
    12. 12. Code Maintainability * Principles Patterns Containers Why? How? What? Extensibility Clean Code Tool reuse* from: Mark Seemann’s “Dependency Injection in .NET” presentation Bay.NET 05/2011
    13. 13. Clean Code DeveloperGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    14. 14. Clean Code Developer – 1st Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    15. 15. Keep it simple, stupid (KISS)
    16. 16. KISS-Principle – “Keep It Simple Stupid” by Kelly Johnson http://blogs.smarter.com/blogs/Lego%20Brick.jpg
    17. 17. The Power of Simplicity Graphic by Nathan Sawaya courtesy of brickartist.comGraphic by Nathan Sawaya courtesy of brickartist.com http://www.geekalerts.com/lego-iphone/
    18. 18. Chaos build from simplicityGraphic by Nathan Sawaya courtesy of brickartist.com
    19. 19. Don’t repeat yourself (DRY)
    20. 20. Don’t repeat yourself (DRY) by Andy Hunt and Dave Thomas in their book “The Pragmatic Programmer”// Code Copy and Paste Method // DRY Methodpublic Class Person public Class Person { { public string FirstName { get; set;} public string FirstName { get; set;} public string LastName { get; set;} public string LastName { get; set;} public Person(Person person) public Person(Person person) { { this.FirstName = string.IsNullOrEmpty(person.FirstName) this.FirstName = person.FirstName.CloneSecured(); ? string.Empty : (string) person.FirstName.Clone(); this.LastName = person.LastName.CloneSecured(); } this.LastName = string.IsNullOrEmpty(person.LastName) ? string.Empty : (string) person.LastName.Clone(); public object Clone() } { return new Person(this); public object Clone() } { } return new Person(this); }} public static class StringExtension { public static string CloneSecured(this string original) { return string.IsNullOrEmpty(original) ? string.Empty : (string)original.Clone(); } }
    21. 21. Clean Code Developer – 1st Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    22. 22. Clean Code Developer – 2nd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    23. 23. Separation of Concerns (SoC) Single Responsibility Principle (SRP)
    24. 24. The Producthttp://www.technicopedia.com/8865.html
    25. 25. Component / Service http://www.technicopedia.com/8865.html
    26. 26. Class, Struct, Enum etc.http://technicbricks.blogspot.com/2009/06/tbs-techpoll-12-results-2009-1st.html
    27. 27. Separation of Concerns (SoC) probably by Edsger W. Dijkstra in 1974• “In computerscience, separation of concerns(SoC) is the process of separatinga computer program into distinctfeatures that overlap infunctionality as little as possible.•A concern is any piece ofinterest or focus in a program.Typically, concerns aresynonymous with features orbehaviors. “ http://en.wikipedia.org/wiki/Separati on_of_Concerns
    28. 28. Single Responsibility Principle (SRP) by Robert C Martin“Every object should have a single responsibility, and thatresponsibility should be entirely encapsulated by the class.” http://en.wikipedia.org/wiki/Single_responsibility_principlepublic class Logger : ILogger{ public Logger(ILoggingSink loggingSink) {} public void Log(string message) {}} http://www.ericalbrecht.com
    29. 29. Read, Read, Read
    30. 30. Clean Code Developer – 2nd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    31. 31. Clean Code Developer – 3rd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    32. 32. Information Hiding Principle (IHP)
    33. 33. Information Hiding Principle (IHP) by David Parnas (1972)“.. information hiding is the principle ofsegregation of the design decisions on acomputer program that are most likely tochange, ..” http://en.wikipedia.org/wiki/Information_hiding
    34. 34. Interfaces / Contracts• Decouple Usage and Implementation through introduction of a contract• Allows to replace implementation without changing the consumerpublic interface ILogger public class Logger : ILogger{ { void Log(string message); public Logger(ILoggingSink loggingSink)} {} public void Log(string message) {} }
    35. 35. Liskov Substitution Principle (LSP)
    36. 36. Liskov Substitution Principle (LSP)by Barbara Liskov, Jannette Wing (1994)“Liskov’s notion of a behavioral subtypedefines a notion of substitutability formutable objects” http://en.wikipedia.org/wiki/Liskov_substitution_principle
    37. 37. Dependency Inversion Principle (DIP)
    38. 38. Dependency Inversion Principle (DIP) by Robert C. Martin• “High-level modules should not depend on low-level modules. Both should depend on abstractions.• Abstractions should not depend upon details. Details should depend upon abstractions.” http://en.wikipedia.org/wiki/Dependency_inversion_principle
    39. 39. Silicon Valley Code Camp Oct. ~ 5th – 6thhttp://www.siliconvalley-codecamp.com
    40. 40. Clean Code Developer – 3rd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    41. 41. Clean Code Developer – 4th Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    42. 42. Open Closed Principle (OCP)
    43. 43. Open/Closed Principle (OCP)by Bertrand Meyer (1988)An implementation is open for extensionbut closed for modification http://en.wikipedia.org/wiki/Open/closed_principle
    44. 44. Law of Demeter (LoD)
    45. 45. Law of Demeter (LoD) Northeastern University (1987)“• Each unit should have only limited knowledge about other units: only units “closely” related to the current unit.• Each unit should only talk to its friends; don’t talk to strangers• Only talk to your immediate friends.” http://en.wikipedia.org/wiki/Law_Of_Demeter
    46. 46. S Single Responsibility Principle O Open/Closed Principle L Liskov Substitution Principle I Interface Segregation Principle D Dependency Inversion PrincipleRobert C Martin: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
    47. 47. Clean Code Developer – 4th Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    48. 48. Clean Code Developer – 5th Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.deGraphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
    49. 49. Summary Clean CodeMaintainability is achieved through:• Readability (Coding Guidelines)• Simplification and Specialization (KISS, SoC, SRP, OCP, )• Decoupling (LSP, DIP, IHP, Contracts, LoD, CoP, IoC or SOA)• Avoiding Code Bloat (DRY, YAGNI)• Quality through Testability (all of them!)
    50. 50. Q&A Downloads, Feedback & Comments: theo@designitright.net www.designitright.net www.speakerrate.com/theojGraphic by Nathan Sawaya courtesy of brickartist.com
    51. 51. http://clean-code-developer.com References…http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOodhttp://www.manning.com/seemann/http://en.wikipedia.org/wiki/Keep_it_simple_stupidhttp://picocontainer.org/patterns.htmlhttp://en.wikipedia.org/wiki/Separation_of_concernshttp://en.wikipedia.org/wiki/Single_responsibility_principlehttp://en.wikipedia.org/wiki/Information_hidinghttp://en.wikipedia.org/wiki/Liskov_substitution_principlehttp://en.wikipedia.org/wiki/Dependency_inversion_principlehttp://en.wikipedia.org/wiki/Open/closed_principlehttp://en.wikipedia.org/wiki/Law_Of_Demeterhttp://en.wikipedia.org/wiki/Dont_repeat_yourselfhttp://en.wikipedia.org/wiki/You_aint_gonna_need_ithttp://en.wikipedia.org/wiki/Component-oriented_programminghttp://en.wikipedia.org/wiki/Service-oriented_architecturehttp://www.martinfowler.com/articles/injection.htmlhttp://www.codeproject.com/KB/aspnet/IOCDI.aspxhttp://msdn.microsoft.com/en-us/magazine/cc163739.aspxhttp://msdn.microsoft.com/en-us/library/ff650320.aspxhttp://msdn.microsoft.com/en-us/library/aa973811.aspxhttp://msdn.microsoft.com/en-us/library/ff647976.aspxhttp://msdn.microsoft.com/en-us/library/cc707845.aspxhttp://msdn.microsoft.com/en-us/library/bb833022.aspxhttp://unity.codeplex.com/http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11
    52. 52. … more ReferencesResharperhttp://www.jetbrains.com/resharper/FxCop / Code Analysishttp://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspxhttp://blogs.msdn.com/b/codeanalysis/http://www.binarycoder.net/fxcop/index.htmlCode Contractshttp://msdn.microsoft.com/en-us/devlabs/dd491992http://research.microsoft.com/en-us/projects/contracts/Pex & Molehttp://research.microsoft.com/en-us/projects/pex/StyleCophttp://stylecop.codeplex.com/Ghostdochttp://submain.com/products/ghostdoc.aspxSpellcheckerhttp://visualstudiogallery.msdn.microsoft.com/7c8341f1-ebac-40c8-92c2-476db8d523ce// Lego (trademarked in capitals as LEGO)
    53. 53. Blog, Rating, Slideswww.speakerrate.com/theojwww.slideshare.net/theojungeblut http://www.DesignItRight.net
    54. 54. Please fill out thefeedback, and…… thanks for you attention!
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×