Stable dependencies principle

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
m (Reverted edits by Ebybymic (Talk); changed back to last version by Joey Scarr)
 
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
In general something is stable if it has steadfastness, reliability, dependability and constancy, as of character or purpose. Therefore a package can be considered stable if it is not changed frequently, or if there is no need to change it frequently. Thus other packages can reliably depend on this stable package. So we could say dependencies between packages in a design should always be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than itself. This can be expanded on classes as well. Classes should only depend on more stable classes.  
 
In general something is stable if it has steadfastness, reliability, dependability and constancy, as of character or purpose. Therefore a package can be considered stable if it is not changed frequently, or if there is no need to change it frequently. Thus other packages can reliably depend on this stable package. So we could say dependencies between packages in a design should always be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than itself. This can be expanded on classes as well. Classes should only depend on more stable classes.  
  
It is important to identify stable packages and packages that change. The packages that are expected to changes should be designed to change. Most of the times, but not always, abstract classes and interfaces are not dependent on others and tend to be more stable as in contrast to concrete or implementation classes. This is because the abstract classes or interfaces typically represent a higher abstraction of a design and not the implementation.
+
It is important to identify stable packages and packages that change. The packages that are expected to change should be designed to change. Most of the time, but not always, abstract classes and interfaces are not dependent on others and tend to be more stable in contrast to concrete or implementation classes. This is because the abstract classes or interfaces typically represent a higher abstraction of a design and not the implementation.
  
==Quantifying Stability==
 
In {{Ref|1}}, a measure of instability (''I'') is given as "dividing efferent coupling [''Ce''] by the sum of both efferent and afferent [''Ca''] coupling". ''I'' = (''Ce'' / (''Ca'' + ''Ce'')). Here, ''I'' belongs to the set of real numbers between 0 and 1 inclusive, where 0 is completely stable.
 
 
==References==
 
#{{Note|1}} http://www.ibm.com/developerworks/java/library/j-cq04256/
 
 
==See also==
 
==See also==
 
*[[Dependency inversion principle]]
 
*[[Dependency inversion principle]]
 
*[http://ifacethoughts.net/2006/04/15/stable-dependencies-principle/ Stable Dependencies Principle]
 
*[http://ifacethoughts.net/2006/04/15/stable-dependencies-principle/ Stable Dependencies Principle]
 +
*[[Stable abstractions principle]]
 +
 +
[[Category:Bob Martin's principles]]

Latest revision as of 03:22, 25 November 2010

In general something is stable if it has steadfastness, reliability, dependability and constancy, as of character or purpose. Therefore a package can be considered stable if it is not changed frequently, or if there is no need to change it frequently. Thus other packages can reliably depend on this stable package. So we could say dependencies between packages in a design should always be in the direction of the stability of the packages. A package should only depend upon packages that are more stable than itself. This can be expanded on classes as well. Classes should only depend on more stable classes.

It is important to identify stable packages and packages that change. The packages that are expected to change should be designed to change. Most of the time, but not always, abstract classes and interfaces are not dependent on others and tend to be more stable in contrast to concrete or implementation classes. This is because the abstract classes or interfaces typically represent a higher abstraction of a design and not the implementation.

See also

Personal tools