applying design principles in practice

48
How to apply design principles in practice? Ganesh Samarthyam Independent Consultant, Corporate Trainer, and Author [email protected]

Upload: ganesh-samarthyam

Post on 03-Jul-2015

335 views

Category:

Software


3 download

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

Page 1: Applying Design Principles in Practice

How to apply design principles in practice?

Ganesh SamarthyamIndependent Consultant, Corporate Trainer, and [email protected]

Page 2: Applying Design Principles in Practice

“Applying design principles is the key to creating high-quality software!”

Architectural principles: Axis, symmetry, rhythm, datum, hierarchy, transformation

Page 3: Applying Design Principles in Practice

Technology changes fast => FOMO

Page 4: Applying Design Principles in Practice

Often frustrating to develop quality software!

Page 5: Applying Design Principles in Practice

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

Page 6: Applying Design Principles in Practice

Think, think, think!

Page 7: Applying Design Principles in Practice

Focus on software design is the key!

Page 8: Applying Design Principles in Practice

Real scenario #1Initial design

Page 9: Applying Design Principles in Practice

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

Page 10: Applying Design Principles in Practice

Time to refactor!Three strikes and you

refactor

Martin Fowler

Page 11: Applying Design Principles in Practice

Potential solution #1?Broken

hierarchy!

Yuck! This solution smells

Page 12: Applying Design Principles in Practice

Potential solution #2?Algorithms not

reusable!

Hmm, can be better. Better luck next time…

Page 13: Applying Design Principles in Practice

Potential solution #3?

Wow!What a nice solution :)

Page 14: Applying Design Principles in Practice

Can you identify the pattern?

Page 15: Applying Design Principles in Practice

You’re right: Its Strategy pattern!

Page 16: Applying Design Principles in Practice

Real scenario #2

Initial design

Page 17: Applying Design Principles in Practice

Real scenario #2

How to add support for new content types and/or algorithms?

Yuck! This design smells

Page 18: Applying Design Principles in Practice

How about this solution?

Wow!What a nice solution :)

Page 19: Applying Design Principles in Practice

Can you identify the pattern structure?

Page 20: Applying Design Principles in Practice

You’re right: Its Bridge pattern!

Page 21: Applying Design Principles in Practice

Wait, what principle did we apply?

Page 22: Applying Design Principles in Practice

Open Closed Principle (OCP)

Bertrand Meyer

Software entities should be open for extension, but closed for modification

Page 23: Applying Design Principles in Practice

Variation Encapsulation Principle (VEP)

Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides

Encapsulate the concept that varies

Page 24: Applying Design Principles in Practice

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

Page 25: Applying Design Principles in Practice

Enabling techniques for encapsulation

Page 26: Applying Design Principles in Practice

Other fundamental principles?

Principles*

Abstrac/on*

Encapsula/on*

Modulariza/on*

Hierarchy*

Page 27: Applying Design Principles in Practice

Applying principles in practice

EncapsulationViolating

encapsulationAdherence to encapsulation

Applying encapsulation

Page 28: Applying Design Principles in Practice

Applying principles in practice

PrincipleViolatingprinciples

Adherence to principles

Refactoring

Bad design (likely to have many smells)

Good design (likely to have many patterns)

Page 29: Applying Design Principles in Practice

Design determines qualities

Understandability Changeability Extensibility

Reusability Testability Reliability

DESIGNimpacts

impactsimpacts

Page 30: Applying Design Principles in Practice

Patterns inside Taj Mahal

Page 31: Applying Design Principles in Practice

The Mughal architectural style

Page 32: Applying Design Principles in Practice

Dravidian styleRenaissance style

Mughal style

Post-modern style

Page 33: Applying Design Principles in Practice

What architectural style is this?

Page 34: Applying Design Principles in Practice

Layering style

Layer N

Layer 3

Layer 2

Layer 1

Page 35: Applying Design Principles in Practice

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?

Page 36: Applying Design Principles in Practice

Reusability +ve impact

Changeability and maintainability +ve impact

Performance -ve impact

Portability and standardisation +ve impact

How layering impacts qualities?

Page 37: Applying Design Principles in Practice

What architectural style is this?

Page 38: Applying Design Principles in Practice

Real-world pipes-and-filters

sediment pre-carbon ultra-filter post-

carbonFiltered water

Page 39: Applying Design Principles in Practice

Pipe-and-filter style

Page 40: Applying Design Principles in Practice

abstraction?

encapsulation?

modularization?

hierarchy?

How pipe-and-filer applies principles?

Page 41: Applying Design Principles in Practice

Reusability?

Changeability and maintainability?

Performance?

Fault-tolerance and reliability?

How pipe-and-filter impacts qualities?

Page 42: Applying Design Principles in Practice

1. Stasis2. Trigger3. The quest4. Surprise5. The critical choice 6. Climax7. Reversal8. Resolution

Story arc analogy

Page 43: Applying Design Principles in Practice

1. Stasis2. Trigger3. The quest4. Surprise5. The critical choice 6. Climax7. Reversal8. Resolution

Applying points for stories

Page 44: Applying Design Principles in Practice

“Applying design principles is the key to creating high-quality software!”

Architectural principles: Axis, symmetry, rhythm, datum, hierarchy, transformation

Page 45: Applying Design Principles in Practice

Presentation sourceForewords by

Grady Booch and Dr. Stephane Ducassewww.designsmells.com

Page 46: Applying Design Principles in Practice

What are your takeaways?

Page 47: Applying Design Principles in Practice

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

Page 48: Applying Design Principles in Practice