Maxim Hierarchy

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
Line 4: Line 4:
 
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]]
 
* [[One responsibility rule]]
* [[Stable dependencies principle]] - ?
+
==== Object Behaviour ====
==== Hide Stuff ====
+
* [[Avoid downcasting]]
 +
* [[Avoid equals]]
 +
==== Object Interface ====
 +
* [[Encapsulate that which varies]]
 +
* [[Encapsulation is hierarchical]]
 +
* [[Dependency inversion principle]]
 +
* [[Interface segregation principle]]
 
* [[Fat interfaces]]
 
* [[Fat interfaces]]
 
* [[Hide your decisions]]
 
* [[Hide your decisions]]
Line 28: Line 25:
 
* [[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 37: Line 33:
 
* [[Stable abstractions principle]]
 
* [[Stable abstractions principle]]
 
* [[Open closed principle]] - ?
 
* [[Open closed principle]] - ?
* [[Design by contract]] - The placement of this maxim is difficult...
+
* [[Design by contract]]
=== Mutability ===
+
 
 +
==== Object Mutability ====
 
* [[Don't expose mutable attributes]]
 
* [[Don't expose mutable attributes]]
 
* [[Getters and setters]]
 
* [[Getters and setters]]
Line 46: Line 43:
 
== Avoid unnecessary complexity ==
 
== Avoid unnecessary complexity ==
 
=== Reuse ===
 
=== Reuse ===
 +
* [[Common reuse principle]]
 
* [[Software reuse]]
 
* [[Software reuse]]
 
* [[Once and only once]]
 
* [[Once and only once]]
Line 62: Line 60:
 
* [[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]]

Revision as of 06:24, 28 September 2009

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