0
Lego for Engineers                                    How to build Reusable                                      and Maint...
Theo Jungeblut• Senior Software Developer at  Omnicell Inc. in Mountain View• Has been designing and  implementing .NET ba...
Overview    • Why Lego for Software Engineers?    • Design Patterns, Principles and Best Practices    • Dependency Injecti...
Why Lego for Software Engineers?Lego (trademarked in capitals as LEGO) is a line of construction toys manufactured by the ...
Design Patterns, Principals         & Best Practices         • Keep it simple stupid (KISS)         • Separation of Concer...
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...
Graphic by Nathan Sawaya courtesy of brickartist.com
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 computer science, separation of concerns...
Single Responsibility Principle (SRP)           by Robert C Martin     “Every object should have a single responsibility, ...
Component-Oriented   Programming       (CoP)
Different Ways of doing Something Similarhttp://www.ericalbrecht.com                                                      ...
Why Reusable Components Rock     http://www.ericalbrecht.com/technic/8020/8020all.jpg18
Interfaces / Contracts     • Decouple Usage and Implementation through introduction of a contract     • Allows to replace ...
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...
Dependency Inversion Principle           (DIP)
Dependency Inversion Principle (DIP)  by Robert C. Martin• “High-level modules should not depend on  low-level modules. Bo...
S               Single Responsibility Principle   O               Open/Closed Principle   L               Liskov Substitut...
Inversion of Control        (IoC)
Inversion of Control (IoC)     by Martin Fowler 1994             Logger logger = new Logger();26
Inversion of Control (IoC)     by Martin Fowler 1994             Logger logger = new Logger();27
The “Must Read”-Book      by Mark Seemann     Dependency     Injection is a set of     software design     principles and ...
Inversion of Control –     Constructor Injection     http://www.martinfowler.com/articles/injection.html     public class ...
Inversion of Control –     Setter (Property) Injection     http://www.martinfowler.com/articles/injection.html        // U...
Inversion of Control (IoC) –      Interface Injection       http://www.martinfowler.com/articles/injection.html           ...
Inversion of Control –     Service Locator     http://www.martinfowler.com/articles/injection.html     // UNITY Example   ...
Inversion of Control –     Service Locator     http://www.martinfowler.com/articles/injection.html     // UNITY Example   ...
Inversion of Control                         Service Locator vs Dependency Injection • Service Locator allows to request e...
Dependency Injection Container & more     • Typically support all types of Inversion of Control mechanisms        • Constr...
The “Must Read”-Book     by Mark Seemann36    http://www.manning.com/seemann/
Summary     Improving Reusability and Maintainability through:     • Simplification and Specialization       (KISS, SoC, S...
Q&A                                         Feedback & Comments:                                                       the...
References Part     http://www.manning.com/seemann/     http://en.wikipedia.org/wiki/Keep_it_simple_stupid     http://pico...
Upcoming SlideShare
Loading in...5
×

Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)

2,307

Published on

My presentation for the LinkedIn .NET User Group (LIDNUG) from June 3rd 2011 about Dependency Injections and related Design Patterns and Best Practices using Lego Technic for visualizing the concepts and ideas.

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

No Downloads
Views
Total Views
2,307
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
33
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)"

  1. 1. Lego for Engineers How to build Reusable and Maintainable Applications in C#Lego (trademarked in capitals as LEGO) Theo Jungeblut 06/03/2011
  2. 2. Theo Jungeblut• Senior Software Developer at Omnicell Inc. in Mountain View• Has been designing and implementing .NET based applications , components and frameworks for 8 years• Previously worked in factory automation with focus on component based software and framework development for 3 ½ years theo@csharp-lighthouse.com• Degree in Software Engineering and Network Communications www.csharp-lightouse.com
  3. 3. Overview • Why Lego for Software Engineers? • Design Patterns, Principles and Best Practices • Dependency Injection Container & more • The “Must Read”-Book • Summary • Q&A • References3
  4. 4. Why Lego for Software Engineers?Lego (trademarked in capitals as LEGO) is a line of construction toys manufactured by the Lego Group http://upload.wikimedia.org/wikipedia/commons/7/75/Lego_technic_gears.jpg 4
  5. 5. Design Patterns, Principals & Best Practices • Keep it simple stupid (KISS) • Separation of Concerns (SoC) • Single Responsibility Principle (SRP) • Component Oriented Programming (CoP) • Interface / Contract • Don’t Repeat Yourself (DRY) • Dependency Inversion Principal (DIP) • Inversion of Control (IoC) • Constructor Injection • Setter Injection • Interface Injection • Service Locator5
  6. 6. Keep it simple, stupid (KISS)
  7. 7. KISS-Principle – “Keep It Simple Stupid” by Kelly Johnson http://blogs.smarter.com/blogs/Lego%20Brick.jpg 7
  8. 8. The Power of Simplicity Graphic by Nathan Sawaya courtesy of brickartist.comGraphic by Nathan Sawaya courtesy of brickartist.com8 http://www.geekalerts.com/lego-iphone/
  9. 9. Graphic by Nathan Sawaya courtesy of brickartist.com
  10. 10. Separation of Concerns (SoC) Single Responsibility Principle (SRP)
  11. 11. The Producthttp://www.technicopedia.com/8865.html
  12. 12. Component / Service http://www.technicopedia.com/8865.html
  13. 13. Class, Struct, Enum etc.http://technicbricks.blogspot.com/2009/06/tbs-techpoll-12-results-2009-1st.html
  14. 14. Separation of Concerns (SoC) probably by Edsger W. Dijkstra in 1974 • “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. “ http://en.wikipedia.org/wiki/Separati on_of_Concerns14
  15. 15. Single Responsibility Principle (SRP) by Robert C Martin “Every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class.” http://en.wikipedia.org/wiki/Single_responsibility_principle public class Logger : ILogger { public Logger(ILoggingSink loggingSink) {} public void Log(string message) {} } http://www.ericalbrecht.com15
  16. 16. Component-Oriented Programming (CoP)
  17. 17. Different Ways of doing Something Similarhttp://www.ericalbrecht.com http://www.julianaheng.com/transformers-rotf-bumblebee- and-sam-action-figures/ http://www.ericalbrecht.com17
  18. 18. Why Reusable Components Rock http://www.ericalbrecht.com/technic/8020/8020all.jpg18
  19. 19. Interfaces / Contracts • Decouple Usage and Implementation through introduction of a contract • Allows to replace implementation without changing the consumer public interface ILogger public class Logger : ILogger { { void Log(string message); public Logger(ILoggingSink loggingSink) } {} public void Log(string message) {} }19
  20. 20. Don’t repeat yourself (DRY)
  21. 21. Don’t repeat yourself (DRY) by Andy Hunt and Dave Thomas in their book “The Pragmatic Programmer” // Code Copy and Paste Method // DRY Method public 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
  22. 22. Dependency Inversion Principle (DIP)
  23. 23. 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 23
  24. 24. 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
  25. 25. Inversion of Control (IoC)
  26. 26. Inversion of Control (IoC) by Martin Fowler 1994 Logger logger = new Logger();26
  27. 27. Inversion of Control (IoC) by Martin Fowler 1994 Logger logger = new Logger();27
  28. 28. The “Must Read”-Book by Mark Seemann Dependency Injection is a set of software design principles and patterns that enable us to develop loosely coupled code.28 http://www.manning.com/seemann/
  29. 29. Inversion of Control – Constructor Injection http://www.martinfowler.com/articles/injection.html public class ContactManager : IContactManager { public ContactManager(ILogger logger, IContactPersistence contactPersistence) { this.logger = logger; if (logger == null) { throw new ArgumentNullException("logger"); } … } }29
  30. 30. Inversion of Control – Setter (Property) Injection http://www.martinfowler.com/articles/injection.html // UNITY Example public class ContactManager : IContactManager { [Dependency] public IContactPersistence ContactPersistence { get { return this.contactPersistence; } set { this.contactPersistence = value; } } }30
  31. 31. Inversion of Control (IoC) – Interface Injection http://www.martinfowler.com/articles/injection.html In this methodology we implement an interface from the IOC framework. IOC framework will use the interface method to inject the object in the main class. You can see in figure ‘Interface based DI’ we have implemented an interface ‘IAddressDI’ which has a ‘setAddress’ method which sets the address object. This interface is then implemented in the customer class. External client / containers can then use the ‘setAddress’ method to inject the address object in the customer object. http://www.codeproject.com/KB/aspnet/IOCDI/InterfacebasedDI.JPG http://www.codeproject.com/KB/aspnet/IOCDI.aspx31
  32. 32. Inversion of Control – Service Locator http://www.martinfowler.com/articles/injection.html // UNITY Example internal static class Program { private static UnityContainer unityContainer; private static SingleContactManagerForm singleContactManagerForm; private static void InitializeMainForm() { singleContactManagerForm = unityContainer.Resolve<SingleContactManagerForm>(); } }32
  33. 33. Inversion of Control – Service Locator http://www.martinfowler.com/articles/injection.html // UNITY Example internal static class Program { private static UnityContainer unityContainer; private static SingleContactManagerForm singleContactManagerForm; private static void InitializeMainForm() { singleContactManagerForm = unityContainer.Resolve<SingleContactManagerForm>(); } }33
  34. 34. Inversion of Control Service Locator vs Dependency Injection • Service Locator allows to request explicitly the needed instance/type/service • Every user of a service has a dependency to the Service Locator • Potential issue if the component need to be provided to 3rd parties. • Favorable for closed platforms as the Service Locator allow more control • Testing is easier with Dependency Injection than a Service Locator if Service provided is not easily substituted • In general Service Locator is only the less compelling choice if the code is mainly used out of the control of the writer34 http://www.martinfowler.com/articles/injection.html#ServiceLocatorVsDependencyInjection
  35. 35. Dependency Injection Container & more • Typically support all types of Inversion of Control mechanisms • Constructor Injection • Property (Setter) Injection • Interface Injection • Service Locator •.NET based DI-Container • Unity • Castle Windsor • StructureMap Related Technology: • Spring.NET • Managed Extensibility Framework (MEF) • Autofac • Windows Communication Foundation (WCF) • Puzzle.Nfactory • Ninject • PicoContainer.NET • and more35
  36. 36. The “Must Read”-Book by Mark Seemann36 http://www.manning.com/seemann/
  37. 37. Summary Improving Reusability and Maintainability through: • Simplification and Specialization (KISS, SoC, SRP) •Decoupling (Interfaces, CoP, DIP or SOA) • Avoiding Code Blow (DRY, YAGNI) • Testability (all of them!) Lego (trademarked in capitals as LEGO)37
  38. 38. Q&A Feedback & Comments: theo@csharp-lighthouse.com www.csharp-lighthouse.comGraphic by Nathan Sawaya courtesy of brickartist.com
  39. 39. References Part 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/Dont_repeat_yourself http://en.wikipedia.org/wiki/You_aint_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://dotnetslackers.com/articles/net/A-First-Look-at-Unity-2-0.aspx http://unity.codeplex.com/ http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=1139
  1. A particular slide catching your eye?

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

×