Skip to content

Commit 9df62d5

Browse files
added cycle classe for better cohesion
1 parent e64202e commit 9df62d5

File tree

5 files changed

+49
-14
lines changed

5 files changed

+49
-14
lines changed

app/Application/Cyclic/CyclicResponseMapper.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22

33
namespace App\Application\Cyclic;
44

5+
use App\Domain\Services\Cycle;
56
use App\Application\Cyclic\CyclicResponse;
67

78
class CyclicResponseMapper
89
{
9-
public function from(array $cycles): CyclicResponse
10+
public function from(Cycle $cycles): CyclicResponse
1011
{
1112
return new CyclicResponse(
12-
count: count($cycles),
13-
cycles: $cycles,
13+
count: $cycles->count(),
14+
cycles: $cycles->all(),
1415
);
1516
}
1617
}

app/Domain/Aggregators/DependencyAggregator.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Domain\Aggregators;
44

5+
use App\Domain\Services\Cycle;
56
use App\Domain\Services\CyclicDependency;
67
use App\Domain\Entities\ClassDependencies;
78

@@ -69,7 +70,7 @@ public function calculateAbstractness(): void
6970
}
7071
}
7172

72-
public function detectCycles(): array
73+
public function detectCycles(): Cycle
7374
{
7475
return $this->cyclicDependency->detect($this->classes);
7576
}

app/Domain/Services/Cycle.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Domain\Services;
4+
5+
class Cycle
6+
{
7+
public array $cycles = [];
8+
9+
public function add(array $cycle): void
10+
{
11+
$this->cycles[] = $cycle;
12+
}
13+
14+
public function isEmpty(): bool
15+
{
16+
return empty($this->cycles);
17+
}
18+
19+
public function count(): int
20+
{
21+
return count($this->cycles);
22+
}
23+
24+
public function all(): array
25+
{
26+
return $this->cycles;
27+
}
28+
}

app/Domain/Services/CyclicDependency.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,30 @@
33
namespace App\Domain\Services;
44

55
use App\Domain\Services\Visited;
6+
use App\Domain\Services\Cycle;
7+
use App\Domain\Services\Stack;
68

79
class CyclicDependency
810
{
911
public function __construct(
1012
private Visited $visited,
1113
private Stack $stack,
14+
private Cycle $cycle,
1215
) {}
1316

14-
public function detect(array $classes): array
17+
public function detect(array $classes): Cycle
1518
{
16-
$cycles = [];
17-
1819
foreach ($classes as $givenClass => $_) {
1920

2021
if ($this->visited->unknown($givenClass)) {
21-
$this->deepDive($givenClass, $classes, $cycles);
22+
$this->deepDive($givenClass, $classes);
2223
}
2324
}
2425

25-
return $cycles;
26+
return $this->cycle;
2627
}
2728

28-
private function deepDive(string $class, array $classes, array &$cycles): void
29+
private function deepDive(string $class, array $classes): void
2930
{
3031
/**
3132
* Duplicate class can exist in the array.
@@ -44,7 +45,7 @@ private function deepDive(string $class, array $classes, array &$cycles): void
4445

4546
$cycle = $this->stack->extractCycle($class);
4647

47-
$cycles[] = $cycle;
48+
$this->cycle->add($cycle);
4849

4950
/**
5051
* Stop the recursion, we can switch to another class.
@@ -58,7 +59,7 @@ private function deepDive(string $class, array $classes, array &$cycles): void
5859

5960
foreach ($classes[$class]->getDependencies() as $dependency) {
6061
if (isset($classes[$dependency])) {
61-
$this->deepDive($dependency, $classes, $cycles);
62+
$this->deepDive($dependency, $classes);
6263
}
6364
}
6465

tests/Unit/Domain/Services/CyclicDependencyTest.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414

1515
$cycles = app(CyclicDependency::class)->detect($dependencyAggregator->classes());
1616

17-
expect($cycles)->toBe([
17+
$this->assertFalse($cycles->isEmpty());
18+
19+
expect($cycles->all())->toBe([
1820
['A', 'B', 'C'],
1921
]);
2022
});
@@ -31,7 +33,9 @@
3133

3234
$cycles = app(CyclicDependency::class)->detect($dependencyAggregator->classes());
3335

34-
expect($cycles)->toBe([
36+
$this->assertFalse($cycles->isEmpty());
37+
38+
expect($cycles->all())->toBe([
3539
['A', 'B'],
3640
['A', 'C'],
3741
]);

0 commit comments

Comments
 (0)