Advanced OOP - Laws, Principles, Idioms

Post on 09-May-2015

6,502 views 0 download

description

Ever heard of the Law of Demeter? How about the Liskov Substitution Principle? This talk introduces key object-oriented laws and principles currently used in our field and provides guidance for their use when building applications on the .NET platform.

transcript

Advanced OOPAdvanced OOPLawsLaws Principles Principles IdiomsIdioms

Clint EdmonsonClint Edmonson

Advanced OOPAdvanced OOPLawsLaws Principles Principles IdiomsIdioms

Clint EdmonsonClint Edmonson

what is oop?what is oop?

abstractionabstractionencapsulationencapsulation

inheritanceinheritance

polymorphismpolymorphism

structuralstructural

domain driven designdomain driven design

All software can be composed of only four elements:

- Value objects - Entities- Services- Modules

separation of concernsseparation of concerns

Every class and method should have a single responsibility.

All its functionality should be narrowly aligned with that responsibility.

the DRY principle

Don’t repeat yourself.Don’t repeat yourself.Don’t repeat yourself.

theory of one right placetheory of one right place

There should be only one right place for a piece of nontrivial of code,

and one right place to make a likely maintenance change.

unit of workunit of workDefine entity families around transactional boundaries.

the open-closed principlethe open-closed principle

Software entities (classes, methods, and modules) should be

open for extension

but closed for modification.

design by contractFortify your methods through

preconditions, post-conditions, and invariant assertions.

creationalcreational

declarative programming

Use attributes to describe what you want to happen and leverage a framework will take care of the how.

the provider modelthe provider model

Define a public service façade that uses an private implementation to perform all of it’s work.

inversion of controlinversion of control

Leverage configuration files to automatically create objects as they are needed.

dependency injectiondependency injection

Declaratively describe dependencies between classes and an IOC framework can automatically instantiate all of them.

object:relational mappingobject:relational mapping

Leverage IOC and dependency injection to automatically load entities from your database.

behavioralbehavioral

principle of scenario driven designprinciple of scenario driven design

All functionality should be driven by usage scenarios.

occam’s razoroccam’s razor

The simplest solution is usually the best.

the pareto principlethe pareto principle

For many phenomena, 80% of the consequences stem from 20% of the causes

the law of demeterthe law of demeter“Don’t talk to your neighbor’s neighbor!”

An object should only call methods and properties belonging to:

- Itself- Any parameters passed in- Objects it creates- Child components

principle of least resource usage

principle of least resource usage

The minimal amount of computational resources should be used to solve a particular need.

principle of least privilegeprinciple of least privilege

Provide the minimal level of access necessary for consumers to do their job.

Combined with the previous principle…

Classes and methods should be as static and private as possible.

the liskov substitution principlethe liskov substitution principle

A derived class should be completely and transparently substitutable for it’s base class.

idempotentsidempotents

Transactional systems should allow thesame information to be received multiple times without being reprocessed.

cyclomatic complexitycyclomatic complexity

The depth of nested logic should be kept to a minimum.

What are What are youryour principles?principles?What are What are youryour principles?principles?

Books– Code Complete - McConnell– Effective C# - Wagner– Framework Design Guidelines – Cwalina & Abrams– Writing Solid Code - Maguire

Links– Application Architecture for .NET– OO Design Principles– Principles of Object Oriented Design– Separation of Concerns (Wikipedia)

References

Clint Edmonson

clinted@microsoft.com

http://www.notsotrivial.net

© 2008 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this information.