Jump to content

Acyclic dependencies principle

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Eransgran (talk | contribs) at 09:12, 21 May 2020 (Added the name of the definer of the relevant principle who is also the author of the reference to it. I can't change the reference itself as the web address cited here does not mention him. But there is no question this document was written by Martin, and he also cites his new book on the last page.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The acyclic dependencies principle (ADP) is a software design principle defined by Robert C. Martin that states that "the dependency graph of packages or components should have no cycles".[1] This implies that the dependencies form a directed acyclic graph.

Example

Circular dependency example

In this UML package diagram, package A depends on packages B and C. Package B in turn depends on package D, which depends on package C, which in turn depends on package B. The latter three dependencies create a cycle, which must be broken in order to adhere to the acyclic dependencies principle.[2]

Types of dependencies

Software dependencies can either be explicit or implicit. Examples of explicit dependencies includes:

  • Include statements, such as #include in C/C++, using in C# and import in Java.
  • Dependencies stated in the build system (e.g. dependency tags in Maven configuration).

Examples of implicit dependencies includes:[3]

In general, it's considered good practice to prefer explicit dependencies whenever possible. This is because explicit dependencies are easier to map and analyze than implicit dependencies.

Cycle breaking strategies

It is in general always possible to break a cyclic dependency chain. The two most common strategies are:[1]

See also

References

  1. ^ a b "Granularity: Acyclic dependencies principle (ADP)" (PDF). Object Mentor. Retrieved 2013-06-14.
  2. ^ Fowler, Martin (2004). UML Distilled.
  3. ^ "Implicit Dependencies Are also Dependencies". O'Reilly. Archived from the original on 2013-05-25. Retrieved 2013-06-16.