applying design principles in practice
DESCRIPTION
Expertise in software architecture and design is key for designing and implementing high-quality enterprise software systems. This session covers how fundamental but powerful design principles can be applied in practice for software architecture and design. By attending this session, the participants will get the following benefits: a) Knowledge of key fundamental design principles b) How design patterns and architectural styles naturally result from applying principles, and c) How smells can be refactored by applying principles.TRANSCRIPT
How to apply design principles in practice?
Ganesh SamarthyamIndependent Consultant, Corporate Trainer, and [email protected]
“Applying design principles is the key to creating high-quality software!”
Architectural principles: Axis, symmetry, rhythm, datum, hierarchy, transformation
Technology changes fast => FOMO
Often frustrating to develop quality software!
There must be a better way!“Here is Edward Bear,
coming downstairs now, bump, bump, bump,
on the back of his head, behind Christopher Robin.
It is, as far as ...
It is, as far as he knows, the only way of coming downstairs,
but sometimes he feels that there really is another way,
if only he could stop bumping for a moment and think of it!”
- A.A. Milne
Think, think, think!
Focus on software design is the key!
Real scenario #1Initial design
Real scenario #1
❖ How will you refactor such that:
❖ A specific DES, AES, TDES, … can be “plugged” at runtime?
❖ Reuse these algorithms in new contexts?
❖ Easily add support for new algorithms in Encryption?
Next change: smelly design
Time to refactor!Three strikes and you
refactor
Martin Fowler
Potential solution #1?Broken
hierarchy!
Yuck! This solution smells
Potential solution #2?Algorithms not
reusable!
Hmm, can be better. Better luck next time…
Potential solution #3?
Wow!What a nice solution :)
Can you identify the pattern?
You’re right: Its Strategy pattern!
Real scenario #2
Initial design
Real scenario #2
How to add support for new content types and/or algorithms?
Yuck! This design smells
How about this solution?
Wow!What a nice solution :)
Can you identify the pattern structure?
You’re right: Its Bridge pattern!
Wait, what principle did we apply?
Open Closed Principle (OCP)
Bertrand Meyer
Software entities should be open for extension, but closed for modification
Variation Encapsulation Principle (VEP)
Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
Encapsulate the concept that varies
Fundamental principle: Encapsulation
The principle of encapsulation advocates separation of concerns andinformation hiding through techniques such as hiding implementation
details of abstractions and hiding variations
Enabling techniques for encapsulation
Other fundamental principles?
Principles*
Abstrac/on*
Encapsula/on*
Modulariza/on*
Hierarchy*
Applying principles in practice
EncapsulationViolating
encapsulationAdherence to encapsulation
Applying encapsulation
Applying principles in practice
PrincipleViolatingprinciples
Adherence to principles
Refactoring
Bad design (likely to have many smells)
Good design (likely to have many patterns)
Design determines qualities
Understandability Changeability Extensibility
Reusability Testability Reliability
DESIGNimpacts
impactsimpacts
Patterns inside Taj Mahal
The Mughal architectural style
Dravidian styleRenaissance style
Mughal style
Post-modern style
What architectural style is this?
Layering style
Layer N
Layer 3
Layer 2
Layer 1
Each layer abstracts something logical (abstraction)
Changes are localised to a layer (encapsulation)
Each layer is a module (modularization)
Layers are organised hierarchically (hierarchy)
How layering applies principles?
Reusability +ve impact
Changeability and maintainability +ve impact
Performance -ve impact
Portability and standardisation +ve impact
How layering impacts qualities?
What architectural style is this?
Real-world pipes-and-filters
sediment pre-carbon ultra-filter post-
carbonFiltered water
Pipe-and-filter style
abstraction?
encapsulation?
modularization?
hierarchy?
How pipe-and-filer applies principles?
Reusability?
Changeability and maintainability?
Performance?
Fault-tolerance and reliability?
How pipe-and-filter impacts qualities?
1. Stasis2. Trigger3. The quest4. Surprise5. The critical choice 6. Climax7. Reversal8. Resolution
Story arc analogy
1. Stasis2. Trigger3. The quest4. Surprise5. The critical choice 6. Climax7. Reversal8. Resolution
Applying points for stories
“Applying design principles is the key to creating high-quality software!”
Architectural principles: Axis, symmetry, rhythm, datum, hierarchy, transformation
Presentation sourceForewords by
Grady Booch and Dr. Stephane Ducassewww.designsmells.com
What are your takeaways?
Image/video credits❖ http://en.wikipedia.org/wiki/Fear_of_missing_out❖ http://lesliejanemoran.blogspot.in/2010_05_01_archive.html❖ http://javra.eu/wp-content/uploads/2013/07/angry_laptop2.jpg❖ https://www.youtube.com/watch?v=5R8XHrfJkeg❖ http://womenworld.org/image/052013/31/113745161.jpg❖ http://www.fantom-xp.com/wallpapers/33/I'm_not_sure.jpg❖ https://www.flickr.com/photos/31457017@N00/453784086 ❖ https://www.gradtouch.com/uploads/images/question3.jpg❖ http://gurujohn.files.wordpress.com/2008/06/bookcover0001.jpg ❖ http://upload.wikimedia.org/wikipedia/commons/d/d5/Martin_Fowler_-_Swipe_Conference_2012.jpg❖ http://www.codeproject.com/KB/architecture/csdespat_2/dpcs_br.gif ❖ http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/Bertrand_Meyer_IMG_2481.jpg/440px-
Bertrand_Meyer_IMG_2481.jpg ❖ http://takeji-soft.up.n.seesaa.net/takeji-soft/image/GOF-OOPLSA-94-Color-75.jpg?d=a0 ❖ https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/OOP_ObjC/Art/watchcalls_35.gif❖ http://www.pluspack.com/files/billeder/Newsletter/25/takeaway_bag.png ❖ http://cdn1.tnwcdn.com/wp-content/blogs.dir/1/files/2013/03/design.jpg