githubEdit

Architecture Assertion

Verify codebase using Konsist API

Architecture assertions are used to perform architecture verification. It is the final step of Konsist verification preceded by scope creation (Create The Scope):

spinner

Assert Architecture

As an example, this simple 2-layer architecture will be used:

spinner

The assertArchitecture block defines architecture layer rules and verifies that the layer requirements are met.

Konsist
    .scopeFromProject()
    .assertArchitecture { 
        // Assert architecture 
    }

Define Layers

Create Layerarrow-up-right class instance to represent project layers. Each Layer instance accepts the name (used for presenting architecture violation errors) and package used to define architectural layer:

Konsist
    .scopeFromProject()
    .assertArchitecture {
        // Define layers
        val presentation = Layer("Presentation", "com.myapp.presentation..")
        val data = Layer("Data", "com.myapp.data..")
    }
circle-info

The inclusion of two trailing dots indicates that the layer is denoted by the com.myapp.business package together with all of its sub-packages.

Define Architecture Assertions

The final step is to define the dependencies (relations) between each layer using one of these methods:

  • dependsOn

  • dependsOnNothing

  • doesNotDependOn

circle-info

See the language referencearrow-up-right for above methods.

The above methods follow up the layer definitions inside assertArchitecture block:

Strict DependsOn

By default dependsOn method works like does not perform strict layer validation (strict = false). However this behaviour is controlled b ystrict parameter:

  • strict = false (default) - may depend on layer

  • strict = true - have to depend on layer

e.g.

Excluding Files

Architecture verification can be performed on KoScope (as seen above) and a list containing KoFiles. For example, you can remove a few files from the scope before performing an architectural check:

This approach provides more flexibility when working with complex projects, however, The desired approach is to create a dedicated scope. See Create The Scope.

Include Layer Without Defining Dependency

The includearrow-up-right method allows to include layer in architecture verification, without defining a dependency for this layer:

Architecture As A Variable

Architecture configuration can be defined beforehand and stored in a variable to facilitate checks for multiple scopes:

This approach may be helpful when refactoring existing applications. To facilitate readability the above checks should be expressed as two unit tests:

Last updated