Design maxims

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
Line 9: Line 9:
 
* [[Acyclic dependencies principle]]
 
* [[Acyclic dependencies principle]]
 
* [[Avoid downcasting]]
 
* [[Avoid downcasting]]
* AvoidEquals
+
* [[Avoid equals]]
* AvoidInheritanceForImplementation
+
* [[Avoid inheritance for implementation]]
* AvoidSideEffects
+
* [[Avoid side effects]]
* BehavioralCompleteness
+
* [[Behavioral completeness]]
* BigDesignUpFront
+
* [[Big design up front]]
* CommandQuerySeparation
+
* [[Command query separation]]
* CommonClosurePrinciple
+
* [[Common closure principle]]
* CommonReusePrinciple
+
* [[Common reuse principle]]
* CouplingAndCohesion
+
* [[Coupling and cohesion]]
* DependencyInversionPrinciple
+
* [[Dependency inversion principle]]
* DesignByContract
+
* [[Design by contract]]
* DontBurnYourBaseClass
+
* [[Don't burn your base class]]
* DontExposeMutableAttributes
+
* [[Don't expose mutable attributes]]
 
* [[Don't repeat yourself]]
 
* [[Don't repeat yourself]]
* DoTheSimplestThingThatCouldPossiblyWork
+
* [[Do the simplest thing that could possibly work]]
* EncapsulateThatWhichVaries
+
* [[Encapsulate that which varies]]
* EncapsulationIsHierarchical
+
* [[Encapsulation is hierarchical]]
* FatInterfaces
+
* [[Fat interfaces]]
* FavorCompositionOverInheritance
+
* [[Favor composition over inheritance]]
* GettersAndSetters
+
* [[Getters and setters]]
* GotoConsideredHarmful
+
* [[Goto considered harmful]]
* HideYourDecisions
+
* [[Hide your decisions]]
* ImpedanceMismatch
+
* [[Impedance mismatch]]
* InformationHiding
+
* [[Information hiding]]
* InterfaceSegregationPrinciple
+
* [[Interface segregation principle]]
* KeepAccessorsAndMutatorsSeparate
+
* [[Keep accessors and mutators separate]]
* KeepItSimple
+
* [[Keep it simple]]
* LawOfDemeter
+
* [[Law of demeter]]
* LiskovSubstitutionPrinciple
+
* [[Liskov substitution principle]]
* ModelTheRealWorld
+
* [[Model the real world]]
* NamedConstants
+
* [[Named constants]]
* NoConcreteBaseClasses
+
* [[No concrete base classes]]
* NoSilverBullet
+
* [[No silver bullet]]
* OneResponsibilityRule
+
* [[One responsibility rule]]
* OpenClosedPrinciple
+
* [[Open closed principle]]
* OnceAndOnlyOnce
+
* [[Once and only once]]
* PrematureOptimization
+
* [[Premature optimization]]
* ProgramToTheInterfaceNotTheImplementation
+
* [[Program to the interface not the implementation]]
* ReuseReleaseEquivalencePrinciple
+
* [[Reuse release equivalence principle]]
* SingleResponsibilityPrinciple
+
* [[Single responsibility principle]]
 
* SeparationOfConcerns
 
* SeparationOfConcerns
 
* SingleChoicePrinciple
 
* SingleChoicePrinciple

Revision as of 01:09, 24 July 2008

Object oriented design maxims

maxim:: (noun) A general truth or rule of conduct expressed in a sentence.

Lets use the term maxim to mean all the rules, laws, guidelines, principles, heuristics, strategies, patterns and idioms that are named by a standard phrase.

Maxims

Clumps of maxims

  • JohnsonAndFootesHeuristics:
 * RecursionIntroduction.
 * EliminateCaseAnalysis.
 * ReduceTheNumberOfArguments.
 * ReduceTheSizeOfMethods.
 * ClassHierarchiesShouldBeDeepAndNarrow.
 * TheTopOfTheClassHierarchyShouldBeAbstract.
 * MinimizeAccessesToVariables.
 * SubclassesShouldBeSpecializations.
 * SplitLargeClasses.
 * FactorImplementationDifferencesIntoSubcomponents.
 * SeparateMethodsThatDoNotCommunicate.
 * SendMessagesToComponentsInsteadOfToSelf.
 * ReduceImplicitParameterPassing
* RielsHeuristics:
* BobMartinsPrinciples:
 * (SRP) The SingleResponsibilityPrinciple
 * (OCP) The OpenClosedPrinciple
 * (LSP) The LiskovSubstitutionPrinciple
 * (DIP) The DependencyInversionPrinciple
 * (ISP) The InterfaceSegregationPrinciple
 * (REP) The ReuseReleaseEquivalencePrinciple
 * (CCP) The CommonClosurePrinciple
 * (CRP) The CommonReusePrinciple
 * (ADP) The AcyclicDependenciesPrinciple
 * (SDP) The StableDependenciesPrinciple
 * (SAP) The StableAbstractionsPrinciple
* KenAuer1995:
 * DefineClassesByBehaviorNotStatePattern. 
 * ImplementBehaviorWithAbstractStatePattern. 
 * IdentifyMessageLayersPattern. 
 * DeferIdentificationOfStateVariablesPattern. 
 * EncapsulateConcreteStatePattern. 
 * UseLazyInitializationPattern. 
 * DefineDefaultValuesViaExplicitProtocolPattern.
* AlanDavis1995:
* CodeSmells
Personal tools