Common Component Diagram Mistake
Explanation
Section titled “Explanation”A component diagram shows the parts of a system and how they depend on each other. See UML Component Diagram. Two mistakes are easy to spot in review.
Artifacts with no link to a component
An artifact is a physical piece of a system, such as a file that gets deployed. An artifact can embody, or manifest, model elements. A component is one such element. The artifact owns the manifestation relationships. Each one records that the artifact uses a model element.
So an artifact on a diagram with no manifestation line leaves readers guessing. They cannot tell which component it stands for. One artifact may manifest several elements. A single artifact can therefore be tied to more than one component.
Circular dependencies between components
A dependency means one component needs another to work. A cycle occurs when component A depends on B, and B depends, directly or through others, back on A.
The acyclic dependencies principle says the dependency graph of components must have no cycles. In other words, it forms a directed acyclic graph: arrows run one way and never loop back.
Cycles can always be broken. One way is to create a new package and move the shared dependencies into it. Both original components then depend on the new package, not on each other.
Example
Section titled “Example”A shop diagram shows an “Orders” component and a “Customers” component. Orders needs customer data. Customers needs order history. The two arrows form a loop.
The fix: move the shared parts, such as the customer and order record definitions, into a new “Shared Records” package. Both components now point to that package. No arrow points back.
On the same diagram, a file named shop.jar appears with no line to anything. Adding a manifestation relationship from the file to the component it embodies removes the guesswork.
Trade-offs
Section titled “Trade-offs”Breaking a cycle by moving shared parts into a new package adds one more element to the diagram and to maintain. The facts here do not go further than that, so check each case on its own.
Diagram source
@startumlcomponent Orderscomponent Customerspackage "Shared Records" as SharedOrders ..> SharedCustomers ..> Sharedartifact "shop.jar" as JarJar ..> Orders : <<manifest>>@endumlChecks
Section titled “Checks”- Every artifact on a component diagram is linked by a manifestation relationship to the model element, such as a component, that it embodies.
- The dependency graph between components has no cycles.
- Where a cycle existed, it was broken, for example by moving shared dependencies into a new package.
Related
Section titled “Related”- UML Component Diagram
- Component Connector (Assembly and Delegation)
- Delegation Connector
- Provided and Required Interface
- Coupling and Cohesion
- Modularity
- UML Modeling Anti-Pattern
- UML Deployment Diagram
Sources
Section titled “Sources”- Unified Modeling Language 2.5 (UML) FTF — Open Issues - OMG Issue Tracker — issues.omg.org, accessed 2026-11-09
- Acyclic dependencies principle - Wikipedia — en.wikipedia.org, accessed 2026-11-09