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...)
 
m (Reverted edits by Ebybymic (Talk); changed back to last version by Lukas Korsika)
 
(12 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]]
+
 
 +
==== Object Behaviour ====
 +
* [[Avoid downcasting]]
 +
* [[Avoid equals]]
 +
==== Object Interface ====
 
* [[Encapsulate that which varies]]
 
* [[Encapsulate that which varies]]
 
* [[Encapsulation is hierarchical]]
 
* [[Encapsulation is hierarchical]]
* [[Encapsulation boundary]]
+
* [[Option-operand separation]]
 
+
* [[Dependency inversion principle]]
===== Hide Stuff =====
+
* [[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]]
===== Inheritance =====
+
==== Inheritance ====
* [[Dependency inversion principle]]
+
 
* [[Favor composition over inheritance]]
 
* [[Favor composition over inheritance]]
 
* [[Avoid inheritance for implementation]]
 
* [[Avoid inheritance for implementation]]
Line 32: Line 31:
 
* [[Law of leaky abstractions]]
 
* [[Law of leaky abstractions]]
 
* [[Liskov substitution principle]]
 
* [[Liskov substitution principle]]
==== Method Level ====
+
* [[No concrete base classes]]
* [[Avoid side effects]]
+
* [[Stable abstractions principle]]
 +
* [[Open closed principle]] - ?
 +
* [[Design by contract]]
 +
 
 +
==== Object Mutability ====
 +
* [[Don't expose mutable attributes]]
 +
* [[Getters and setters]]
 +
* [[Keep accessors and mutators separate]]
 
* [[Command query separation]]
 
* [[Command query separation]]
=== Avoid unnecessary complexity ===
+
* [[Avoid side effects]]
 +
== Avoid unnecessary complexity ==
 +
=== Reuse ===
 +
* [[Common reuse principle]]
 +
* [[Software reuse]]
 +
* [[Once and only once]]
 
* [[Don't repeat yourself]]
 
* [[Don't repeat yourself]]
 +
* [[Reuse release equivalence principle]]
 +
=== 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]]
* [[Software reuse]]
+
* [[Premature optimization]]
 
* [[Keep it simple]]
 
* [[Keep it simple]]
 +
* [[Establishing priorities]]
 +
=== Readable Code is Good Code ===
 
* [[Named constants]]
 
* [[Named constants]]
 
* [[Goto considered harmful]]
 
* [[Goto considered harmful]]
 +
=== Group Stuff To Reduce Complexity ===
 
* [[Common closure principle]]
 
* [[Common closure principle]]
* [[Establishing priorities]]
+
* [[Single choice principle]]
* [[Design by contract]] - The placement of this maxim is difficult
+
== Dependencies ==
=== Minimise connections ===
+
* [[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]]
  
== 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]]
 
== 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]]
 

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