Die Architektur „einfrieren“

Mittels ArchUnit lässt sich die Architektur in einem Java oder C# Projekt genau spezifizieren und entsprechend erzwingen. Ist dieses Tooling nicht von Anfang an im Projekt eingebunden, können sich schnell technische Schulden häufen, welche es gilt abzuarbeiten. Es gibt aber Dinge, welche sich nicht in innerhalb von ein paar Minuten oder einem dafür vorgesehen Sprint lösen lassen. Man möchte aber dann doch, dass diese Regel eingehalten wird und keine weiteren Verstöße hinzukommen. Dafür bietet uns ArchUnit die sogenannten ‚Freeze Rules‘.

import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
import org.springframework.stereotype.Service;

import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
import static com.tngtech.archunit.library.freeze.FreezingArchRule.freeze;

@AnalyzeClasses(packages = "de.r3dsoft.blog")
public class ArchitectureTest {
    @ArchTest
    static final ArchRule services_should_reside_in_service_package = freeze(classes().that().areAnnotatedWith(Service.class)
            .should().resideInAPackage("..service.."));
}

Die ‚Freeze Rule‘ schreibt nun alle Verstöße in einen Store und gleicht diesen jedesmal mit den Ergebnissen des Tests ab. Sollten weitere hinzukommen, schlägt der Test fehl.

Der Vorteil dabei ist, dass es dadurch möglich ist, die Regel „aktiv“ zu lassen und die angehäuften Schulden sukzessive abzubauen ohne dabei neue derselben Sorte anzuhäufen.

2570cookie-checkDie Architektur „einfrieren“

Kommentar verfassen