Maxim Hierarchy

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
(New page: This is one attempt to categorise maxims. == Design & implementation == All those maxims related to the system itself. === Separate and group system parts rationally === ==== Class & Pack...)
 
Line 15: Line 15:
 
* [[Separation of concerns]]
 
* [[Separation of concerns]]
 
* [[Dependency injection]]
 
* [[Dependency injection]]
* [[Encapsulate that which varies]]
+
* [[Encapsulate that which varies]] - Could be Hide Stuff
* [[Encapsulation is hierarchical]]
+
* [[Encapsulation is hierarchical]] - Could be Hide Stuff
* [[Encapsulation boundary]]
+
* [[Encapsulation boundary]] - Could be Hide Stuff
 
+
* [[Interface segregation principle]]
 +
* [[One responsibility rule]]
 +
* [[Stable dependencies principle]] - ?
 
===== Hide Stuff =====
 
===== Hide Stuff =====
 
* [[Fat interfaces]]
 
* [[Fat interfaces]]
Line 25: Line 27:
 
* [[Tell, Don't Ask]]
 
* [[Tell, Don't Ask]]
 
* [[Don't expose mutable attributes]]
 
* [[Don't expose mutable attributes]]
 +
* [[Program to the interface not the implementation]]
 
===== Inheritance =====
 
===== Inheritance =====
 
* [[Dependency inversion principle]]
 
* [[Dependency inversion principle]]
Line 32: Line 35:
 
* [[Law of leaky abstractions]]
 
* [[Law of leaky abstractions]]
 
* [[Liskov substitution principle]]
 
* [[Liskov substitution principle]]
 +
* [[No concrete base classes]]
 +
* [[Stable abstractions principle]]
 +
* [[Open closed principle]] - ?
 
==== Method Level ====
 
==== Method Level ====
 
* [[Avoid side effects]]
 
* [[Avoid side effects]]
Line 45: Line 51:
 
* [[Common closure principle]]
 
* [[Common closure principle]]
 
* [[Establishing priorities]]
 
* [[Establishing priorities]]
* [[Design by contract]] - The placement of this maxim is difficult
+
* [[Keep accessors and mutators separate]]
 +
* [[Once and only once]]
 +
* [[Premature optimization]]
 +
* [[Single choice principle]]
 +
* [[Reuse release equivalence principle]]
 +
* [[Design by contract]] - The placement of this maxim is difficult...
 
=== Minimise connections ===
 
=== Minimise connections ===
 
* [[Acyclic dependencies principle]]
 
* [[Acyclic dependencies principle]]
Line 51: Line 62:
 
* [[Impedance mismatch]]
 
* [[Impedance mismatch]]
 
* [[Getters and setters]]
 
* [[Getters and setters]]
 +
* [[Law of Demeter]]
  
 
== Process & Organisation ==
 
== Process & Organisation ==
Line 57: Line 69:
 
* [[Big design up front]]
 
* [[Big design up front]]
 
* [[Software crisis]]
 
* [[Software crisis]]
 
== Unsorted ==
 
All those maxims that have not been applied to a category...
 
 
* [[Interface segregation principle]]
 
* [[Keep accessors and mutators separate]]
 
* [[Law of Demeter]]
 
* [[No concrete base classes]]
 
 
* [[No silver bullet]]
 
* [[No silver bullet]]
* [[One responsibility rule]]
 
* [[Open closed principle]]
 
* [[Once and only once]]
 
* [[Premature optimization]]
 
* [[Program to the interface not the implementation]]
 
* [[Reuse release equivalence principle]]
 
* [[Single choice principle]]
 
* [[Stable abstractions principle]]
 
* [[Stable dependencies principle]]
 

Revision as of 10:01, 27 September 2009

This is one attempt to categorise maxims.

Contents

Design & implementation

All those maxims related to the system itself.

Separate and group system parts rationally

Class & Package Level

This is a rather large block... are there any overarching rules that can group these components...

Data & Behaviour
Hide Stuff
Inheritance

Method Level

Avoid unnecessary complexity

Minimise connections

Process & Organisation

All the maxims related to the development processes and management of the development team.

OO Developers are not perfect

Personal tools