expect('Shared\\ValueObjects') ->classes() ->toBeFinal(); arch('shared value objects classes are readonly') ->expect('Shared\\ValueObjects') ->classes() ->toBeReadonly(); arch('shared ports contain only interfaces') ->expect('Shared\\DDD\\Ports') ->toBeInterfaces(); arch('shared usecase contracts are interfaces') ->expect('Shared\\DDD\\UseCases') ->toBeInterfaces(); arch('shared exceptions extend Exception') ->expect('Shared\\DDD\\Exceptions') ->classes() ->toExtend(\Exception::class); arch('shared layer is completely isolated from other application layers') ->expect('Shared') ->not->toUse(['Application', 'Domain', 'Infrastructure', 'Illuminate', 'Symfony']); });