3
3
4
4
namespace Shouze \ParkedLife \Domain ;
5
5
6
- class VehicleFleet
7
- {
8
- private $ userId ;
6
+ use Shouze \ParkedLife \EventSourcing \AggregateRoot ;
7
+ use Shouze \ParkedLife \EventSourcing \Change ;
9
8
9
+ final class VehicleFleet extends AggregateRoot
10
+ {
10
11
private $ vehicles = [];
11
12
12
13
public function __construct (UserId $ userId )
13
14
{
14
- $ this -> userId = $ userId ;
15
+ parent :: __construct (( string ) $ userId) ;
15
16
}
16
17
17
18
public static function ofUser (UserId $ userId ): VehicleFleet
@@ -21,30 +22,23 @@ public static function ofUser(UserId $userId): VehicleFleet
21
22
22
23
public function registerVehicle (string $ platenumber , string $ description )
23
24
{
24
- $ changes = [
25
- new VehicleWasRegistered ($ platenumber , (string )$ this ->userId ),
26
- new VehicleWasDescribed ($ platenumber , $ description )
27
- ];
28
-
29
- foreach ($ changes as $ change ) {
30
- $ handler = sprintf ('when%s ' , implode ('' , array_slice (explode ('\\' , get_class ($ change )), -1 )));
31
- $ this ->{$ handler }($ change );
32
- }
25
+ $ this ->record (new VehicleWasRegistered ($ this ->getAggregateId (), $ platenumber ));
26
+ $ this ->record (new VehicleWasDescribed ($ this ->getAggregateId (), $ platenumber , $ description ));
33
27
34
28
return $ this ->vehicleWithPlatenumber ($ platenumber );
35
29
}
36
30
37
- public function whenVehicleWasRegistered ($ change )
31
+ public function whenVehicleWasRegistered (VehicleWasRegistered $ change )
38
32
{
39
- $ this ->vehicles [] = Vehicle::register ($ change ->getPlatenumber (), new UserId ($ change ->getUserId ()));
33
+ $ this ->vehicles [] = Vehicle::register ($ change ->getPlatenumber (), new UserId ($ change ->getAggregateId ()));
40
34
}
41
35
42
36
public function describeVehicle (string $ platenumber , string $ description )
43
37
{
44
- $ this ->whenVehicleWasDescribed (new VehicleWasDescribed ($ platenumber , $ description ));
38
+ $ this ->record (new VehicleWasDescribed ($ this -> getAggregateId (), $ platenumber , $ description ));
45
39
}
46
40
47
- public function whenVehicleWasDescribed ($ change )
41
+ public function whenVehicleWasDescribed (VehicleWasDescribed $ change )
48
42
{
49
43
$ vehicle = $ this ->vehicleWithPlatenumber ($ change ->getPlatenumber ());
50
44
$ vehicle ->describe ($ change ->getDescription ());
@@ -93,7 +87,7 @@ function ($carry, Vehicle $v) use ($platenumber) {
93
87
);
94
88
95
89
if (null === $ vehicle ) {
96
- throw new \LogicException (sprintf ('Vehicle with plate number %s is unknown in fleet #%s ' , $ platenumber , $ this ->userId ));
90
+ throw new \LogicException (sprintf ('Vehicle with plate number %s is unknown in fleet #%s ' , $ platenumber , $ this ->getAggregateId () ));
97
91
}
98
92
99
93
return $ vehicle ;
0 commit comments