Interface ArchRule

All Superinterfaces:
CanBeEvaluated, CanOverrideDescription<ArchRule>, HasDescription
All Known Subinterfaces:
ClassesShouldConjunction, CodeUnitsShouldConjunction<CODE_UNIT>, FieldsShouldConjunction, MembersShouldConjunction<MEMBER>, MethodsShouldConjunction
All Known Implementing Classes:
Architectures.LayeredArchitecture, Architectures.OnionArchitecture, CompositeArchRule, FreezingArchRule, SliceRule

public interface ArchRule
extends CanBeEvaluated, CanOverrideDescription<ArchRule>
Represents a rule about a specified set of objects of interest (e.g. JavaClass). To define a rule, use one of the factory methods within ArchRuleDefinition, for example


 ArchRule rule = ArchRuleDefinition.noClasses().that().resideInAPackage("..svc..")
                     .should().accessClassesThat().resideInAPackage("..ui..");
 rule.check(importedJavaClasses);
 

To write rules on custom objects, you can use ArchRuleDefinition.all(ClassesTransformer), where ClassesTransformer defines how the type of objects can be created from imported JavaClasses. E.g. if you want to define a rule on all imported methods you could specify a transformer to retrieve methods from classes, or if you're interested in slices of packages, the input transformer would specify how to transform the imported classes to those slices to run an ArchCondition against.
See Also:
Slices.Transformer