Maxim Hierarchy

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
m (Design & implementation)
m (Reverted edits by Ebybymic (Talk); changed back to last version by Lukas Korsika)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
This is one attempt to categorise maxims.
+
This is an attempt to categorise maxims.
  
== Design & implementation ==
+
= Design & Implementation =
 
All those maxims related to the system itself.
 
All those maxims related to the system itself.
=== Separate and group system parts rationally ===
+
== Separate and group system parts rationally ==
==== Class & Package Level ====
+
==== Defining the objects ====
This is a rather large block... are there any overarching rules that can group these components...
+
* [[Encapsulation boundary]]
===== Data & Behaviour =====
+
* [[Avoid downcasting]]
+
* [[Common reuse principle]]
+
 
* [[Model the real world]]
 
* [[Model the real world]]
* [[Avoid equals]]
 
 
* [[Behavioral completeness]]
 
* [[Behavioral completeness]]
 
* [[Single responsibility principle]]
 
* [[Single responsibility principle]]
 
* [[Separation of concerns]]
 
* [[Separation of concerns]]
* [[Dependency injection]]
 
* [[Encapsulate that which varies]] - Could be Hide Stuff
 
* [[Encapsulation is hierarchical]] - Could be Hide Stuff
 
* [[Encapsulation boundary]] - Could be Hide Stuff
 
* [[Interface segregation principle]]
 
* [[One responsibility rule]]
 
* [[Stable dependencies principle]] - ?
 
  
===== Hide Stuff =====
+
==== Object Behaviour ====
 +
* [[Avoid downcasting]]
 +
* [[Avoid equals]]
 +
==== Object Interface ====
 +
* [[Encapsulate that which varies]]
 +
* [[Encapsulation is hierarchical]]
 +
* [[Option-operand separation]]
 +
* [[Dependency inversion principle]]
 +
* [[Interface segregation principle]]
 
* [[Fat interfaces]]
 
* [[Fat interfaces]]
 
* [[Hide your decisions]]
 
* [[Hide your decisions]]
 
* [[Information hiding]]
 
* [[Information hiding]]
 
* [[Tell, Don't Ask]]
 
* [[Tell, Don't Ask]]
* [[Don't expose mutable attributes]]
 
 
* [[Program to the interface not the implementation]]
 
* [[Program to the interface not the implementation]]
===== Inheritance =====
+
==== Inheritance ====
* [[Dependency inversion principle]]
+
 
* [[Favor composition over inheritance]]
 
* [[Favor composition over inheritance]]
 
* [[Avoid inheritance for implementation]]
 
* [[Avoid inheritance for implementation]]
Line 39: Line 34:
 
* [[Stable abstractions principle]]
 
* [[Stable abstractions principle]]
 
* [[Open closed principle]] - ?
 
* [[Open closed principle]] - ?
==== Method Level ====
+
* [[Design by contract]]
* [[Avoid side effects]]
+
 
* [[Command query separation]]
+
==== Object Mutability ====
 +
* [[Don't expose mutable attributes]]
 +
* [[Getters and setters]]
 
* [[Keep accessors and mutators separate]]
 
* [[Keep accessors and mutators separate]]
* [[Design by contract]] - The placement of this maxim is difficult...
+
* [[Command query separation]]
=== Avoid unnecessary complexity ===
+
* [[Avoid side effects]]
==== Reuse ====
+
== Avoid unnecessary complexity ==
 +
=== Reuse ===
 +
* [[Common reuse principle]]
 
* [[Software reuse]]
 
* [[Software reuse]]
 
* [[Once and only once]]
 
* [[Once and only once]]
 
* [[Don't repeat yourself]]
 
* [[Don't repeat yourself]]
 
* [[Reuse release equivalence principle]]
 
* [[Reuse release equivalence principle]]
==== Do only what is necessary ====
+
=== Do only what is necessary ===
 
* [[Do the simplest thing that could possibly work]]
 
* [[Do the simplest thing that could possibly work]]
 
* [[You ain't gonna need it]]
 
* [[You ain't gonna need it]]
Line 56: Line 55:
 
* [[Keep it simple]]
 
* [[Keep it simple]]
 
* [[Establishing priorities]]
 
* [[Establishing priorities]]
==== Readable Code is Good Code ====
+
=== Readable Code is Good Code ===
 
* [[Named constants]]
 
* [[Named constants]]
 
* [[Goto considered harmful]]
 
* [[Goto considered harmful]]
==== Group Stuff To Reduce Complexity ====
+
=== Group Stuff To Reduce Complexity ===
 
* [[Common closure principle]]
 
* [[Common closure principle]]
 
* [[Single choice principle]]
 
* [[Single choice principle]]
=== Minimise connections ===
+
== Dependencies ==
 +
* [[Dependency injection]]
 +
* [[Stable dependencies principle]]
 
* [[Acyclic dependencies principle]]
 
* [[Acyclic dependencies principle]]
 
* [[Coupling and cohesion]]
 
* [[Coupling and cohesion]]
 
* [[Impedance mismatch]]
 
* [[Impedance mismatch]]
* [[Getters and setters]]
 
 
* [[Law of Demeter]]
 
* [[Law of Demeter]]
  
== Process & Organisation ==
+
= Process & Organisation =
 
All the maxims related to the development processes and management of the development team.
 
All the maxims related to the development processes and management of the development team.
=== OO Developers are not perfect ===
+
== OO Developers are not perfect ==
 
* [[Big design up front]]
 
* [[Big design up front]]
 
* [[Software crisis]]
 
* [[Software crisis]]
 
* [[No silver bullet]]
 
* [[No silver bullet]]

Latest revision as of 03:08, 25 November 2010

This is an attempt to categorise maxims.

Contents

Design & Implementation

All those maxims related to the system itself.

Separate and group system parts rationally

Defining the objects

Object Behaviour

Object Interface

Inheritance

Object Mutability

Avoid unnecessary complexity

Reuse

Do only what is necessary

Readable Code is Good Code

Group Stuff To Reduce Complexity

Dependencies

Process & Organisation

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

OO Developers are not perfect

Personal tools