@startuml package application { class desktopApplication } package ui { class ProgressPrinter { print(Progress) } class FinalResultPrinter { print(ResultLine) } } application ..> ui ui ..> domain package domain { class model class ResultLine { provResult level } class ProvResult interface Repository } application ..> domain package infrastructure { class RepositoryImpl class Prov { registerProgressObserver } } Repository ..> infrastructure using ..> used @enduml