applying design principles in practice

Post on 03-Jul-2015

336 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

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 Authorganesh.samarthyam@gmail.com

“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

top related