The S.O.L.I.D. Principles of OO and Agile Design – Robert Martin

Gestern habe ich mir “unseren” Godfather angesehen. Der Typ ist echt verrückt:) Seine Show war sehr unterhaltsam. Störend war nur ein Zuhörer, der bei jedem Lacher so laut war, das man Robert nicht mehr hörte. Der Freak kennt auch keine rethorischen Fragen. Aber zurück zu Robert. Worum geht es bei OO? Im wesentlichen um Dependency Management. Wie macht man dies gut und S.O.L.I.D.:

  • SRP :  Single Responsibility Principle
    • A class should have one, and only one, reason to change
    • Zu extrem: Eine Klasse – eine public Method
    • Besser Themen-Gruppierung, d.h. BusinessRule, Reporting, Persistent voneinander trennen
  • OCP : Open / Closed Principle
    • Modules should be open for extension, but closed for modification
    • new functionality durch new code und nicht durch Änderung des existierenden Codes
    • Enums (als Type-Unterscheider) sind nicht OCP
  • LSP: Liskov Substitution Principle
    • Derived classes must be usable through the base class interface, without knowing it
    • You are falling in this trap if you have a lot of instance-of
    • if‘s are behind the scene and therefore horrible. Make it explicit
  • ISP: Interface Segregation Principle
  • DIP: Dependency Inversion Principle
    • Details should depend on abstractions. Abstractions should not depend on details
  • instance-of and dynamic casting is ugly
  • Type-Safety kann in Teilen aufgegeben werden, wenn man auf TDD setzt
    • Beispiel: App called ShapeFactory.make(String)
    • “oberer” Layer: Shape, App, ShapeFactory
    • “unterer” Layer: Circle, Square, ShapeFactoryImp
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: