Maxim Hierarchy

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
m
m (Reverted edits by Ebybymic (Talk); changed back to last version by Lukas Korsika)
 
(6 intermediate revisions by 3 users not shown)
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
+
==== Object Behaviour ====
* [[Encapsulation is hierarchical]] - Could be Hide Stuff
+
* [[Avoid downcasting]]
* [[Encapsulation boundary]] - Could be Hide Stuff
+
* [[Avoid equals]]
 +
==== Object Interface ====
 +
* [[Encapsulate that which varies]]
 +
* [[Encapsulation is hierarchical]]
 +
* [[Option-operand separation]]
 +
* [[Dependency inversion principle]]
 
* [[Interface segregation principle]]
 
* [[Interface segregation principle]]
* [[One responsibility rule]]
 
* [[Stable dependencies principle]] - ?
 
==== Hide Stuff ====
 
 
* [[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 38: 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 side effects]]
 
== Avoid unnecessary complexity ==
 
== Avoid unnecessary complexity ==
 
=== Reuse ===
 
=== Reuse ===
 +
* [[Common reuse principle]]
 
* [[Software reuse]]
 
* [[Software reuse]]
 
* [[Once and only once]]
 
* [[Once and only once]]
Line 61: Line 61:
 
* [[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]]
  

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