Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Diego (07/27/2013)

2,262 views

Published on

All 3 Clean Code presentations provide great value by themselves, but taken together are designed to offer a holistic approach to successful software creation. This first session creates the foundation for the 2nd Clean Code presentation on Dependency Injection, as it explains expected base knowledge.

Why writing Clean Code makes us more efficient 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.

This presentation is based on C# and Visual Studio 2012. However, the demonstrated patterns and practice can be applied to every other programming language too.

Published in: Technology
  • Be the first to comment

Clean Code I - Design Patterns and Best Practices at SoCal Code Camp San Diego (07/27/2013)

  1. 1. Clean Code I San Diego, July 27th, 2013 SolCal Code Camp Design Patterns and Best Practices
  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 • Enjoys cycling, running and eating theo@designitright.net www.designitright.net
  3. 3. Rate Session & Win a Shirt http://www.speakerrate.com/theoj
  4. 4. Where to get the Slides http://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 Code make 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 & Software Craftsmanship
  11. 11. The “Must Read”-Book(s)by Robert C Martin A Handbook of Agile Software Craftsmanship “Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees.”
  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 Developer Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
  14. 14. Graphic 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.de
  15. 15. Keep it simple, stupid (KISS)
  16. 16. KISS-Principle – “Keep It Simple Stupid” http://blogs.smarter.com/blogs/Lego%20Brick.jpg by Kelly Johnson
  17. 17. The Power of Simplicity http://www.geekalerts.com/lego-iphone/ Graphic by Nathan Sawaya courtesy of brickartist.com Graphic by Nathan Sawaya courtesy of brickartist.com
  18. 18. Chaos build from simplicity Graphic 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 public Class Person { public string FirstName { get; set;} public string LastName { get; set;} public Person(Person person) { this.FirstName = string.IsNullOrEmpty(person.FirstName) ? string.Empty : (string) person.FirstName.Clone(); this.LastName = string.IsNullOrEmpty(person.LastName) ? string.Empty : (string) person.LastName.Clone(); } public object Clone() { return new Person(this); } } // DRY Method public Class Person { public string FirstName { get; set;} public string LastName { get; set;} public Person(Person person) { this.FirstName = person.FirstName.CloneSecured(); this.LastName = person.LastName.CloneSecured(); } 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. Graphic 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.de
  22. 22. Clean Code Developer – 2nd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de Graphic 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. http://www.technicopedia.com/8865.html The Product
  25. 25. http://www.technicopedia.com/8865.html Component / Service
  26. 26. http://technicbricks.blogspot.com/2009/06/tbs-techpoll-12-results-2009-1st.html Class, Struct, Enum etc.
  27. 27. Separation of Concerns (SoC) • “In computer science, separation of concerns (SoC) is the process of separating a computer program into distinct features that overlap in functionality as little as possible. •A concern is any piece of interest or focus in a program. Typically, concerns are synonymous with features or behaviors. “ probably by Edsger W. Dijkstra in 1974 http://en.wikipedia.org/wiki/Separati on_of_Concerns
  28. 28. Single Responsibility Principle (SRP) “Every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class.” by Robert C Martin http://www.ericalbrecht.com http://en.wikipedia.org/wiki/Single_responsibility_principle public class Logger : ILogger { public Logger(ILoggingSink loggingSink) {} public void Log(string message) {} }
  29. 29. Read, Read, Read
  30. 30. Clean Code Developer – 2nd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/
  31. 31. Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/ Clean Code Developer – 3rd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de
  32. 32. Information Hiding Principle (IHP)
  33. 33. “.. information hiding is the principle of segregation of the design decisions on a computer program that are most likely to change, ..” Information Hiding Principle (IHP) by David Parnas (1972) http://en.wikipedia.org/wiki/Information_hiding
  34. 34. Interfaces / Contracts public interface ILogger { void Log(string message); } • Decouple Usage and Implementation through introduction of a contract • Allows to replace implementation without changing the consumer public class Logger : ILogger { public Logger(ILoggingSink loggingSink) {} public void Log(string message) {} }
  35. 35. Liskov Substitution Principle (LSP)
  36. 36. “Liskov’s notion of a behavioral subtype defines a notion of substitutability for mutable objects” Liskov Substitution Principle (LSP) by Barbara Liskov, Jannette Wing (1994) http://en.wikipedia.org/wiki/Liskov_substitution_principle
  37. 37. Dependency Inversion Principle (DIP)
  38. 38. Dependency Inversion Principle (DIP) • “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 by Robert C. Martin
  39. 39. Silicon Valley Code Camp Oct. ~ 5th – 6th http://www.siliconvalley-codecamp.com
  40. 40. Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/ Clean Code Developer – 3rd Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de
  41. 41. Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/ Clean Code Developer – 4th Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de
  42. 42. Open Closed Principle (OCP)
  43. 43. An implementation is open for extension but closed for modification Open/Closed Principle (OCP) by Bertrand Meyer (1988) http://en.wikipedia.org/wiki/Open/closed_principle
  44. 44. Law of Demeter (LoD)
  45. 45. “ • 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.” Law of Demeter (LoD) Northeastern University (1987) http://en.wikipedia.org/wiki/Law_Of_Demeter
  46. 46. Single Responsibility Principle Open/Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle S O L I D Robert C Martin: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  47. 47. Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/ Clean Code Developer – 4th Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de
  48. 48. Graphic by Michael Hönnig http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/ Clean Code Developer – 5th Iteration by Ralf Westphal & Stefan Lieser – http://www.clean-code-developer.de
  49. 49. Summary Clean Code Maintainability 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. Downloads, Feedback & Comments: Q & A Graphic by Nathan Sawaya courtesy of brickartist.com theo@designitright.net www.designitright.net www.speakerrate.com/theoj
  51. 51. References…http://clean-code-developer.com http://michael.hoennig.de/2009/08/08/clean-code-developer-ccd/ http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod http://www.manning.com/seemann/ http://en.wikipedia.org/wiki/Keep_it_simple_stupid http://picocontainer.org/patterns.html http://en.wikipedia.org/wiki/Separation_of_concerns http://en.wikipedia.org/wiki/Single_responsibility_principle http://en.wikipedia.org/wiki/Information_hiding http://en.wikipedia.org/wiki/Liskov_substitution_principle http://en.wikipedia.org/wiki/Dependency_inversion_principle http://en.wikipedia.org/wiki/Open/closed_principle http://en.wikipedia.org/wiki/Law_Of_Demeter http://en.wikipedia.org/wiki/Don't_repeat_yourself http://en.wikipedia.org/wiki/You_ain't_gonna_need_it http://en.wikipedia.org/wiki/Component-oriented_programming http://en.wikipedia.org/wiki/Service-oriented_architecture http://www.martinfowler.com/articles/injection.html http://www.codeproject.com/KB/aspnet/IOCDI.aspx http://msdn.microsoft.com/en-us/magazine/cc163739.aspx http://msdn.microsoft.com/en-us/library/ff650320.aspx http://msdn.microsoft.com/en-us/library/aa973811.aspx http://msdn.microsoft.com/en-us/library/ff647976.aspx http://msdn.microsoft.com/en-us/library/cc707845.aspx http://msdn.microsoft.com/en-us/library/bb833022.aspx http://unity.codeplex.com/ http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11
  52. 52. … more References Resharper http://www.jetbrains.com/resharper/ FxCop / Code Analysis http://msdn.microsoft.com/en-us/library/bb429476(VS.80).aspx http://blogs.msdn.com/b/codeanalysis/ http://www.binarycoder.net/fxcop/index.html Code Contracts http://msdn.microsoft.com/en-us/devlabs/dd491992 http://research.microsoft.com/en-us/projects/contracts/ Pex & Mole http://research.microsoft.com/en-us/projects/pex/ StyleCop http://stylecop.codeplex.com/ Ghostdoc http://submain.com/products/ghostdoc.aspx Spellchecker http://visualstudiogallery.msdn.microsoft.com/ 7c8341f1-ebac-40c8-92c2-476db8d523ce// Lego (trademarked in capitals as LEGO)
  53. 53. Blog, Rating, Slides http://www.DesignItRight.net www.speakerrate.com/theoj www.slideshare.net/theojungeblut
  54. 54. … thanks for you attention! And visit and support the www.sandiegodotnet.com Please fill out the feedback, and… www.speakerrate.com/theoj

×